2016-03-27 11 views
2

Ich versuche, Daten aus einer DAT-Datei in ein Array zu laden.Laden und Analysieren von Daten aus Datei in Array

Meine Daten werden in folgendem Format aus mehreren Zeilen zusammen:

param_1::param_2::value

ich in diese Daten lesen wollen und es zu einem 2D-Array konvertieren (oder einem anderen geeigneten Format), so werde ich haben:

myData[param_1,param_2]=value

zur Zeit ich brauche ich versuche, in der Datei in eine String-Array mit Stream, zu lesen, aber nicht wissen, wie man die Daten von Zeichenketten in das Format zu konvertieren.

Dies ist der Lese-Teil, den ich gerade benutze. Was muss ich tun, um die Daten korrekt zu analysieren?

 StreamReader reader = new StreamReader("file.dat"); 
     string strAllFile = reader.ReadToEnd().Replace("\r\n", "\n").Replace("\n\r", "\n"); 
     string[] arrLines = strAllFile.Split(new char[] { '\n' }); 

Vielen Dank für Ihre Hilfe!

Antwort

2

Sie könnten etwas tun, diese Linq Anweisung gibt die Sammlung param1, param2, value aus jeder Zeile in der Datei zurück.

var dataList = File.ReadAllLines("file.dat") // Read lines 
     .Select(l=> l.Split(new string[] { "::" }, StringSplitOptions.None)) // split each line 
     .Select(l=> new 
       { 
        param1 = l[0], 
        param2 = l]1], 
        value = l[2] 
       }) 
     .ToList(); 

Jetzt können Sie iterieren Liste mit

foreach(var item in dataList) 
{ 
    // logic here. 
    myData[item.param1,item.param2]=item.value 

} 
+0

die zweite ist. Wählen Sie (...), dass es in der ersten .Select-Anweisung eingeschlossen sein soll? Irgendwo fehlt noch ein ')' ... – yarbaur

+0

Ahh ... du hast recht, da wurde jetzt eine fehlende Bracket korrigiert. –

0

wenn Anzahl der Zeilen und Spalten von myData bekannt ist, können Sie einfach Ihre Funktion wie folgt schreiben:

public void parseString(string[] lines) 
{ 
    int[,] myData = new int[100, 100]; 
    foreach (string s in lines) 
    { 
     string[] data = s.Split("::"); 
     int x = Convert.ToInt32(data[0]); 
     int y = Convert.ToInt32(data[1]); 
     int value = Convert.ToInt32(data[2]); 

     myData[x, y] = value; 
    } 
} 
Verwandte Themen