【发布时间】:2014-05-09 15:47:16
【问题描述】:
这些天来,我一直在处理一些大的分隔文本 (~1GB) 文件。它看起来有点像下面
COlumn1 #COlumn2#COlumn3#COlumn4
COlumn1#COlumn2#COlumn3 #COlumn4
其中 # 是分隔符。
如果一列无效,我可能必须将其从整个文本文件中删除。第 3 列无效时的输出文件应如下所示。
COlumn1 #COlumn2#COlumn4
COlumn1#COlumn2#COlumn4
string line = "COlumn1# COlumn2 #COlumn3# COlumn4";
int junk =3;
int columncount = line.Split(new char[] { '#' }, StringSplitOptions.None).Count();
//remove the [junk-1]th '#' and the value till [junk]th '#'
//"COlumn1# COlumn2 # COlumn4"
我无法在 SO 中找到它的 c# 版本。有没有办法我可以做到这一点?请帮忙。
编辑: 我发现自己的解决方案如下所示,它可以完成这项工作。有没有办法可以将其修改为更好的方式,以缩小在大型文本文件的情况下可能对性能产生的影响?
int junk = 3;
string line = "COlumn1#COlumn2#COlumn3#COlumn4";
int counter = 0;
int colcount = line.Split(new char[] { '#' }, StringSplitOptions.None).Length - 1;
string[] linearray = line.Split(new char[] { '#' }, StringSplitOptions.None);
List<string> linelist = linearray.ToList();
linelist.RemoveAt(junk - 1);
string finalline = string.Empty;
foreach (string s in linelist)
{
counter++;
finalline += s;
if (counter < colcount)
finalline += "#";
}
Console.WriteLine(finalline);
【问题讨论】:
-
从拆分中获取数组,然后在写回之前删除元素。要删除数组中的元素,请查看stackoverflow.com/questions/457453/…