2016-05-10 10 views
0

私は非常に大きなカンマ区切りのテキストファイルを持っています。各フィールドは、前述のようにカンマで区切られ、引用符(すべての文字列)で囲まれています。問題は、フィールドの中には、そのフィールド内に複数行のCRが含まれていることが挙げられます。だから、私がReadLineを実行すると、そのCRで停止します。 CRLFの組み合わせでのみ停止するように指示できればいいと思います。crlfの行区切り文字でBIGテキストファイルを読む最良の方法

誰かがこれを行うためのすてきな方法がありますか?ファイルは非常に大きくなる可能性があります。

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) { ... } 
+0

チェックこの[MSDNの記事](https://social.msdn.microsoft.com/Forums/vstudio/en-US/07f3fbab-53cc-4744-9ecaを使用-758b61c2f44d/streamreader-readline-new-and-modified-fixed-single-crlf?forum = netfxbcl)を参照してください。 – ClasG

+0

コード(スニペット)を入力してください。 Microsoft.VisualBasic.FileIO.TextFieldParserを使用すると、私の経験から大きな助けになります! –

+0

[フィールド内のLineFeedsでCsvファイルを読む]の可能な複製(http://stackoverflow.com/questions/18206487/read-csv-file-with-linefeeds-within-its-fields) –

答えて

2

を処理:

string line = File.ReadAllText("input.txt"); // Read the text in one line 

を使用する方法について次に、このようにキャリッジリターン/ラインフィードでそれを分割する方法

1

特定の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"); 
+0

私はこれを試しました: Regex splitter = new Regex( "\ r \ n"); string [] AllLines = splitter.Split(iFile.ReadToEnd()); CRLFで分かれているものの、CRだけで時折分裂してしまいます。非常に奇妙な。 –

関連する問題