2017-09-21 1 views
-2

텍스트 파일에서 데이터를 읽었습니다. 해당 파일의 데이터를 Int 배열로 변경하고 싶습니다. 나는 왜 그것이 틀린 것인지 모른다.입력 문자열의 형식이 올바르지 않습니다. 예외 C#

class Program 
{ 
    public static int[,] provincial = new int[100, 100]; 

    public static void loadProvincial() 
    { 
     string[] s = System.IO.File.ReadAllLines("C:\\Users\\Lyn203\\Desktop\\data\\final-graph.txt"); 

     for (int i = 0; i < s.Length; ++i) 
     { 

      string[] splitedArray = s[i].Replace("\t","_").Split('_'); 

      //Console.WriteLine(splitedArray[i]); 

      for (int j = 0; j < splitedArray.Length-1; ++j) 
      { 

       provincial[i,j] = int.Parse(splitedArray[j].ToString()); 
      } 

     } 
     Console.ReadLine(); 
    } 

    static void Main(string[] args) 
    { 
     loadProvincial(); 

    } 
} 

및이 TextFile : http://textuploader.com/djhbe

+0

어떤 예외가 발생합니까? – mjwills

+1

예외가 발생했을 때'splitedArray [j] .ToString()'의 값은 무엇입니까? – mjwills

+1

값이 비어 있거나! string.IsNullOrWhiteSpace (splitedArray [j]) 또는 int.TryParse가 배열 –

답변

0

난 당신이 빈 항목을 제거 overload of Split를 호출하는 것이 좋습니다. 즉, 두 탭 사이에 값이없는 두 개의 연속 된 탭이있는 경우 결과에 빈 문자열이 포함됩니다. 그 문자열은 코드가 다음 Int32.TryParse로에서 Int32.Parse 교체 빈 문자열을 만날 때 0을 추가 할 대신하는 경우에서 Int32.Parse

string[] splitedArray = s[i].Replace("\t","_") 
          .Split(new char[] {'_'}, 
          StringSplitOptions.RemoveEmptyEntries); 

로 전환되지 않습니다. 이렇게하면 값이 누락 된 경우 예외없이 변환 결과를 확인할 수 있습니다.

for(.....) 
{ 
    int value; 
    Int32.TryParse(splitedArray[j], out value); 
    // if conversion fails, value will be set to the default value for integers (0) 
    provincial[i,j] = value; 
} 
관련 문제