2016-03-06 90 views
1

所以我試圖從文本文件讀取並將每個字段存儲到數組中。但是,當我試圖將accountNumber轉換爲Int時,出現錯誤。嘗試轉換時的格式異常

 public bool matchCustomer(int accountID){ 
     string[] data = null; 
     string line = Global.currentFile.reader.ReadLine(); 
     while (line != null) 
     { 
      data = line.Split('*'); 
      this.accountNumber = Convert.ToInt32(data[0]); 
      line = Global.currentFile.reader.ReadLine(); 
      if (accountID == this.accountNumber) 
      { 
       return true; 
      } 

      } 

     return false; 
     } 
+0

什麼錯誤,什麼是'數據[0]'的價值? – Steve

+0

錯誤顯示「輸入字符串格式不正確」。 data [0]的值是12345.文本文件的第一行是12345 * Shrek * 1209 * 100,000 * 50,000 –

+0

如果這些值都是數字,那麼有沒有更多10位數的值? (具體地說,大於'2,147,483,647') –

回答

1

這是因爲data [0]不能轉換爲int。什麼是運行時的數據[0]?

你可以使用:

int value; 
if(Int32.TryParse(data[0], out value)) 
{ 
    accountNumber = value; 
} 
else 
{ 
    //Something when data[0] can't be turned into an int. 
    //You'll have to decide this logic. 
} 
+1

是的,TryParse也是一個安全的選擇。 ;)投票 – Ian

1

有可能的,因爲你用分隔符*在字符串中分割:

12345 * Shrek * 1209 * 100,000 * 50,000 

你留下了一個間隔號的 「12345」,而不是所有的數字 「12345」 。這導致它不可轉換。嘗試應用修剪:

this.accountNumber = Convert.ToInt32(data[0].Trim()); 

此外,請注意帶有千位分隔符逗號(50,000和100,000)的字符串。您可能需要用空字符串來取代它,如果它是不可轉換:

data[4].Replace(",","").Trim(); 
+0

我懷疑這個空間,但通過控制檯應用程序測試顯示Convert.ToIn32(..)是足夠智能修剪。然而,你是正確的,它不能正確地捕捉到逗號。 –

+1

你可以測試它是很好的。 :)我現在不用我的筆記本電腦。有時候這種看似正確的格式會給我們帶來問題。 :) – Ian

0

其他兩個答案解決的問題並解決,我想提供一種使用Linq另一個替代的。

您可以用此替換完整的while塊內容。

return line.Split('*').Select(s=> s.Trim().Replace(",", "")) 
      .Where(c=> Regex.IsMatch(c.Trim(), @"\d+")) 
      .Select(s=>int.Parse(s.Trim()))    
      .Any(e=>e == accountId); 

工作Demo

相關問題