2013-05-19 26 views
0

我正在從文本文件讀取整數到int數組,因此我使用以下代碼。但它似乎並沒有在整數的預期數量爲:從文本文件讀取整數時出現意外的數值

string fileContent = File.ReadAllText("D:\\pixels.txt"); 
TextWriter tw = new StreamWriter("D:\\print.txt"); 
string[] integerStrings = fileContent.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 
int[] integers = new int[integerStrings.Length]; 
for (int n = 0; n < integerStrings.Length; n++) 
{ 
    integers[n] = int.Parse(integerStrings[n]); 
    tw.Write(integers[n]+" "); 
} 
tw.Write(integers.Length+" "+integerStrings.Length+" "); 

在文件(TW)我得到的所有整數打印出來,但integers.LengthintegerStrings.Length是不正確的。他們應該是262,144,但他們都是41,616。 我想不出任何問題。

+0

剛剛重新標記。 –

+0

你爲什麼不使用正則表達式呢?看起來像這正是他們的目的。 – Yatrix

+1

@Yatrix好像文件只是空格分隔的數字。當一個簡單的「Split」可以完成時,正則表達式會過度殺傷。 –

回答

1

嘗試這種情況:

int dummyInt; 
var integers = File.ReadAllText("C:\\temp\\pixels.txt") 
        .Split(new char[] { ' ', '\r', '\n' }) 
        .Select(n => (int?)(Int32.TryParse(n, out dummyInt) 
           ? dummyInt 
           : (int?)null)) 
        .Where(n => n.HasValue) 
        .Select(n => n.Value) 
        .ToArray(); 

上面的代碼應該給你整數數組是從輸入文件中讀取,由' '分裂和新行,並僅選擇這些值,其可被轉化成Int32

+0

您應該避免發佈像這樣密集的代碼牆,而不必解釋OP的組成部分。我已經重新格式化了它,因此它很清晰。 – user7116