2012-11-18 21 views
7

我用MyString.Split(Environment.Newline.ToCharArray()[0])將我的字符串從一個文件分割成不同的部分。但是,數組中的每個項目,除了第一個以\ n開始之後,我都是這樣做的?我知道我通過換行符分裂的方式對於缺少更好的單詞有點「不足」,所以如果有更好的方法,請告訴我...使用Environment.Newline分割字符串在大多數數組項中離開 n?

這是文件。 .. enter image description here

+0

那麼,你期待在一個新的文件行上的每個記錄? – Jared

+0

是啊,它就像123 \ n 123 \ n 123 \ n 123 – Oztaco

+1

你會將你的輸入文件發佈到某個地方嗎?前幾行就夠了。 –

回答

14

如果你想要使用.Split(),而不是讀的同時,你可以做一個行文件,以保持...

var splitResult = MyString.Split(new string[]{ System.Environment.NewLine }, 
    System.StringSplitOptions.RemoveEmptyEntries ); 
    /* or System.StringSplitOptions.None if you want empty results as well */ 

編輯:

的問題,你在非unix環境中有新的「字符」實際上是兩個字符。所以當你抓住零指數時,你實際上是在回車符上分割......而不是換行符(\ n)。

視窗= 「\ r \ n」 個

的Unix = 「\ n」 個

http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx

+0

我不知道爲什麼它是「\ r \ n」而不是「\ n」......謝謝,這個作品 – Oztaco

+2

問微軟:) – Jared

1

在Windows的換行是兩個字符(\ r和\ n)的。表達式Environment.Newline.ToCharArray()[0]僅指定其中一個字符:\ r。因此,另一個字符(\ n)仍然是分割字符串的一部分。

我建議你使用這樣的閱讀您的文件:

public IEnumerable<string> ReadFile(string filePath) 
{ 
    using (StreamReader rdr = new StreamReader(filePath)) 
    { 
     string line; 
     while ((line = reader.ReadLine()) != null) 
     { 
      yield return line; 
     } 
    } 
} 

您可能需要更多的錯誤處理,或指定不同的文件打開選項,或流傳遞給方法,而不是路徑,但通過ReadLine()方法使用迭代器的想法是合理的。其結果是你可以使用這樣的代碼:

foreach (string line in ReadLine(" ... my file path ... ")) 
{ 

} 
+0

fyi括號在第一個代碼塊中正確配對。 – Jared

+0

@jared得到它,感謝您發現錯字 –

+0

np,我試圖修復,但編輯不是六個字符... – Jared