2010-11-12 55 views
0

我有一個多兆字節的.sql文件,在每10k左右的換行符上有GO語句。我試圖想出一種逐行讀取文件的方法,直到我找到一個只有「去」和換行符的新行,然後將讀取的內容返回給調用者,然後讀取下一堆文字,直到我再次打開GO。閱讀文本文件到GO

Peek只讓我讀取一個字符,在Framework 4.0上用C#做這項工作的聰明方法是什麼?

謝謝。

回答

2

這應該完全符合你的意思。
使用SQL文件的文件名字符串調用該函數,它將返回一個IEnumerable<string>(一串字符串),每個字符串持有一個SQL批處理(每個語句直到GO語句),然後您可以通過foreach或其他任何東西。

public static IEnumerable<string> GetSqlBatches(string filename) 
{ 
    using(StreamReader sr = new StreamReader(filename)) 
    { 
     StringBuilder ReadSoFar = new StringBuilder(); 

     while (!sr.EndOfStream) 
     { 
      string line = sr.ReadLine(); 
      ReadSoFar.AppendLine(line); 
      if (line.Trim() == "GO") 
      { 
       yield return ReadSoFar.ToString(); 
       ReadSoFar = new StringBuilder(); 
      } 
     } 
     sr.Close(); 
    } 
} 
0

如果你讀了BufferedStream的文件,然後,一旦你讀了「GO」的令牌,你可以尋求回行的開頭。

如果該文件將永遠是磁盤(而不是在內存中或從網絡連接來),你也可以只用一個FileStream,因爲這也可搜索。