2014-01-10 42 views
0

我試圖讀取從文件空間分隔的數字。 如何從文件讀取到一行中列出?

using (var streamReader = new StreamReader("save.txt", Encoding.UTF8)) 
{ 
    list = streamReader.ReadToEnd().Split(new char[] { ' ' }, 1).Select(n => int.Parse(n)).ToList(); 
} 

當我嘗試在int.Parse(n)n運行這段代碼,我得到System.FormatException beeing整個文件中包含字符串內容。 只要我明白爲什麼我得到這個例外,我不知道爲什麼Split()方法不工作?

+1

請辭「一條線」的東西是一個可疑的目標。你可以把你的整個程序寫在一行中,這會更糟糕,而不是更好。 –

回答

4

你在Split(new char[] { ' ' }, 1)不必要1個參數,這意味着只有一個元素將被返回。使用RemoveEmptyEntries選項也更安全。您還可以簡化從文件中讀取與File.ReadAllText幫助:

File.ReadAllText("path") 
    .Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries) 
    .Select(n => int.Parse(n)) 
    .ToList(); 
2

有一個1到用於分裂串字符的列表,刪除它的工作原理。

list = streamReader.ReadToEnd() 
     .Split(new char[] { ' ' }) 
     .Select(n => int.Parse(n)).ToList(); 

如果離開1然後分裂的結果將是隻有一個元素的數組。
例如,如果你有這樣的輸入字符串

string input = "1 2 3 4 5"; 
string[] result = input.Split(new char[] {' '}, 1); 

結果將是一個數組這樣

result.Length == 1; // true 
result[0] == "1 2 3 4 5"; // true 

當然傳遞字符串

int.Parse("1 2 3 4 5") 

給出上述錯誤。

1

我一直很喜歡File.ReadAllLines() - 它可以追溯到NET 2.0和我沒有寫我ONW的任何代碼。