2012-09-21 63 views
2

我目前正在將數據存儲到數組中。該程序從文本文件中獲取信息,然後使用產品名稱格式化結果。問題是,如果在文本的起始行中找到除數字(int)之外的其他文件,則文件會中斷。具體在productID = Convert.ToInt16(storeData[0]);。如果文本文件中的第一個字符不是整數,我該如何避免破壞程序?將數據存儲到數組中並檢查它是否是有效整數

的信息看起來如何在文本文件中:產品ID,月份和銷售

1 5 20.00

CODE

string[] productName = new string[100]; 
       string arrayLine; 
       int[] count = new int[100]; 
       int productID = 0; 
       double individualSales = 0; 
       double[] totalSales = new double[100]; 
       double[] totalAverage = new double[100]; 

       productName[1] = "Cookies"; 
       productName[2] = "Cake"; 
       productName[3] = "Bread"; 
       productName[4] = "Soda"; 
       productName[5] = "Soup"; 
       productName[99] = "Other";          

       while ((arrayLine = infile.ReadLine()) != null) 
       { 


        string[] storeData = arrayLine.Split(' '); 

        productID = Convert.ToInt16(storeData[0]); 
        individualSales = Convert.ToDouble(storeData[2]); 

        if (stateName[productID] != null) 
        { 
         count[productID] += 1; 
         totalSales[stateID] += individualSales; 
        } 
        else 
        { 
         count[99] += 1; 
         totalSales[99] += individualSales; 
        } 


       } 
       infile.Close(); 
+0

旁註:你的示例代碼包含太多與問題無關的東西,請儘量縮小(5-7行最好)。 'Convert.ToInt16'產生'short',如果你真的希望'int'值使用'Convert.ToInt32'。 –

回答

3
if (!Int16.TryParse(storeData[0], out productID)) 
    continue;//or do something else 

Int16.TryParse

爲Gromer狀態d,我寧願使用int.TryParse(這實際上是Int32.TryParse)...

+0

我會建議'int.TryParse'或'Int32.TryParse',因爲'int'可以存儲多達32位的有符號整數值。 – Gromer

+0

@Gromer,我同意你的說法;) –

+0

是的,我只是對整個問題提出這樣的問題,而不是專門針對你。我知道問題中的代碼使用了'Int16'。 – Gromer

1

去替代productID = Convert.ToInt16(storeData[0]);有:

if (Int16.TryParse(storeData[0], out productID)) 
{ 
    //do somthing 
} 
0

的TryParse可以幫助你:

if(Int16.TryParse(storeData[0], out productId)) 
{ 
    //do stuff 
} 
else 
{ 
    //wasn't valid 
} 
相關問題