2017-09-21 7 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を呼び出すことが示唆されました。言い換えると、2つのタブの間に値を持たない2つの連続したタブがある場合、結果に空の文字列が含まれます。あなたのコードは、その後Int32.TryParseとでInt32.Parseを置き換える空の文字列を満たしたときにゼロを追加したい場合はその文字列がで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; 
} 
関連する問題