2017-09-21 6 views
-2

Ich habe Daten aus einer Textdatei gelesen. Ich möchte Daten in dieser Datei in ein Int-Array ändern. Ich weiß nicht, warum es falsch ist.Eingabezeichenfolge nicht im richtigen Format Ausnahme 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(); 

    } 
} 

und Textfile: http://textuploader.com/djhbe

+0

Welche Zeile wirft diese Ausnahme? – mjwills

+1

Was ist der Wert von 'splitedArray [j] .ToString()', wenn diese Ausnahme auftritt? – mjwills

+1

Überprüfen Sie, ob der Wert leer oder nicht wie folgt ist: string.IsNullOrWhiteSpace (splitedArray [j]) oder int.TryParse und dann Array zuweisen –

Antwort

0

Ich schlage vor, Sie overload of Split aufrufen, die die leeren Einträge entfernt. Mit anderen Worten, wenn Sie zwei aufeinanderfolgende Registerkarten ohne einen Wert zwischen den beiden Registerkarten haben, enthält Ihr Ergebnis eine leere Zeichenfolge. Dieser String ist nicht konvertierbar von Int32.Parse

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

Stattdessen, wenn Sie eine Null hinzugefügt werden soll, wenn Ihr Code eine leere Zeichenfolge trifft dann die Int32.Parse mit Int32.TryParse ersetzen. Dies ermöglicht Ihnen, das Ergebnis der Konvertierung zu überprüfen, ohne eine Ausnahme zu erhalten, wenn ein Wert fehlt.

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; 
} 
Verwandte Themen