我有一個非常大的以逗號分隔的文本文件。如前所述,每個字段都用逗號分隔,並用引號(所有字符串)包圍。問題是某些字段包含該字段中多行的CR。所以當我做一個ReadLine時,它停在那個CR上。如果我能告訴它只停止在CRLF組合上,那將是很好的。用crlf行分隔符讀取BIG文本文件的最佳方法
有沒有人有任何活潑的方法來做到這一點?這些文件可能非常大。
我有一個非常大的以逗號分隔的文本文件。如前所述,每個字段都用逗號分隔,並用引號(所有字符串)包圍。問題是某些字段包含該字段中多行的CR。所以當我做一個ReadLine時,它停在那個CR上。如果我能告訴它只停止在CRLF組合上,那將是很好的。用crlf行分隔符讀取BIG文本文件的最佳方法
有沒有人有任何活潑的方法來做到這一點?這些文件可能非常大。
如果你想要具體ReadLine
,爲什麼不實施呢?
public static class MyFileReader {
public static IEnumerable<String> ReadLineCRLF(String path) {
StringBuilder sb = new StringBuilder();
Char prior = '\0';
Char current = '\0';
using (StreamReader reader = new StreamReader(path)) {
int v = reader.Read();
if (v < 0) {
if (prior == '\r')
sb.Append(prior);
yield return sb.ToString();
yield break;
}
prior = current;
current = (Char) v;
if ((current == '\n') && (prior == '\r')) {
yield return sb.ToString();
sb.Clear();
}
else if (current == '\r') {
if (prior == '\r')
sb.Append(prior);
}
else
sb.Append(current);
}
}
}
然後用它
var lines = MyFileReader
.ReadLineCRLF(@"C:\MyData.txt");
如何使用
string line = File.ReadAllText("input.txt"); // Read the text in one line
然後拆分它回車/換行是這樣的:
var split = line.Split('\n'); // I'm not really sure it's \n you'll need, but it's something!
,然後在循環處理等通過線
foreach(var line in split) { ... }
我試過這個: Regex splitter = new Regex(「\ r \ n」); string [] AllLines = splitter.Split(iFile.ReadToEnd()); 有點你指的是CRLF,但是我仍然偶爾會在CR上發生分裂。很奇怪。 –
選中此[MSDN文章](https://social.msdn.microsoft.com/Forums/vstudio/en-US/07f3fbab-53cc-4744-9eca -758b61c2f44d/StreamReader的-readline的新 - 和 - 改進的固定單CRLF?論壇= netfxbcl)。 – ClasG
請提供您的代碼(片段)!使用Microsoft.VisualBasic.FileIO.TextFieldParser是我的經驗的一大幫助! –
[在其字段中使用LineFeeds讀取Csv文件]可能重複(http://stackoverflow.com/questions/18206487/read-csv-file-with-linefeeds-withinits-fields) –