2010-11-30 22 views
6

我的問題很簡單。我需要從Windows文本文件中獲取所有文本行。 所有行由\ r \ n符號分隔。我使用String.Split,但它並不酷,因爲 它只分裂'一個符號',留下空白字符串,我需要使用選項標誌刪除。有沒有更好的辦法?如何從Windows文本文件中拆分行(/ r/n separation)

我實現

string wholefile = GetFromSomeWhere(); 

// now parsing 
string[] lines = operationtext.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 

// ok now I have lines array 

UPDATE

File.ReadAllXXX是沒有用的,這裏怎麼把GetFromSomeWhere實際上是正則表達式,所以我在這之後一直沒有文件。

+0

絕對檢查此[提案](http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2「代碼審查「)。它幾乎就在那裏,只需要更多的支持:) – greatwolf 2011-01-17 22:15:04

回答

15

您可以使用String.Splitthis overload,這需要一個字符串數組,可以作爲分隔符:

string[] lines = operationtext.Split(new[] { Environment.NewLine }, 
            StringSplitOptions.RemoveEmptyEntries); 

中當然,如果你已經有文件路徑,使用起來要簡單得多File.ReadAllLines

string[] lines = File.ReadAllLines(filePath); 
+1

不能使用,但如果我在Reflector中看到它的功能 – 2010-11-30 11:58:36

4

String.Split確實接受一個字符串(如「\ r \ n」)。不只是一個chararray。

string[] lines = wholetext.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); 
3

你可以使用類似下面的擴展方法,然後你的代碼應該是這樣的:

var lines = operationText.ReadAsLines(); 

擴展方法實現:

public static IEnumerable<string> ReadAsLines(this string text) 
    { 
     TextReader reader = new StringReader(text); 
     while(reader.Peek() >= 0) 
     { 
      yield return reader.ReadLine(); 
     } 
    } 

我猜它不是作爲高性能通常非常高效的拆分選項,但如果這不是一個問題...