2012-09-21 2 views
2

현재 배열에 데이터를 저장하는 중입니다. 프로그램은 텍스트 파일에서 정보를 가져 와서 결과를 제품 이름으로 포맷합니다. 문제는 텍스트의 시작 라인에 숫자 (int)가 없으면 파일이 손상된다는 것입니다. 특히 productID = Convert.ToInt16(storeData[0]);에 있습니다. 텍스트 파일의 첫 번째 문자가 정수가 아닌 경우 프로그램을 중단하지 않으려면 어떻게해야합니까?배열에 데이터 저장 및 유효한 정수인지 확인

정보] 텍스트 파일에서 어떻게 보이는지

: Gromer 상태로 제품 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'은'int' 값이'Convert.ToInt32'를 사용할 것으로 기대한다면'short'를 생성합니다. –

답변

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

Int16.TryParse

D, 차라리 (Int32.TryParse 사실이다) int.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 
}