我有一个我正在尝试解析的大文本文件。为了解析这个文件,我需要删除字符串前的所有选项卡,但不能删除。
所以例如......
@{
var dataFile = Server.MapPath("~/Files/myFile.txt");
var ListFromFile= File.ReadAllLines(dataFile);
var str = String.Join("\n", ListFromFile.ToArray());
}
<textarea>@str</textarea>
我目前通过将文件读入一个数组(由换行符分隔),遍历每一行,然后为每一行调整字符串直到达到一个非制表符,就像这样....
string sample = "\t\t\tThis is a string \t with a tab";
sample = RemoveInitialTabs(sample);
// sample should now be "This is a string \t with a tab";
这很有效,但速度很慢(由于文件中内容的大小,运行通常只需要66,453ms来删除标签)....
有什么想法吗?
答案 0 :(得分:2)
我认为可以帮助您的是TrimStart(params char[] trimChars)
MSDN Link
例如,你可以使用它:
sample = sample.TrimStart(new char[] {'\t'});
这将是所希望的输出。
答案 1 :(得分:2)
我认为你可以保存的一个地方(只是一点点):为什么先读取所有字符串,然后处理它们并处理两个巨大数组的所有复制?!
我的意思是:为什么在阅读文本文件时没有正确删除主要标签?
另一方面;您当前的解决方案坚持&#34;职责分离&#34;原理。它为整体运行时间的一个潜在改进打开了大门:在阅读完初始内容后,您可以切片该数组并使用多个线程在并行>中修剪该数组的不同部分STRONG>。
你看,最后你谈的是一项代价高昂的操作:更改字符串的开头意味着复制字符串(至少在大多数语言中)。无论你是使用自己的代码,还是使用正则表达式,还是使用TrimStart()......你都无法获得某个&#34;价格标签&#34;。但假设我们正在谈论真正庞大的数组(可能是成千上万行);然后并行处理这些行可以让你显着减少整体运行时间。
答案 2 :(得分:0)
尝试使用正则表达式:
string pattern = "^\s*";
for (int i = file_content.Count - 1; i > -1; i--)
{
file_content[i] = Regex.Replace(file_content[i], pattern, String.Empty));
}