2016-08-10 3 views
0

Öffnen Sie sich für verschiedene Vorschläge. Mein Problem ist folgendes: Ich habe eine mittlere Textdatei (~ 100 Zeilen) und benötigen Informationen aus bestimmten Linien aus dieser Konfigurationsdatei aus dieser LinieElegante Möglichkeiten, um einzigartige IFs zu behandeln

AcquisitionMode=3   --> 3 
MovingCalculationLoop=1 
MovingCalculationType=0 
ReadoutMode=4    --> 4 
ReadoutRegisterMode=0 

Zum Beispiel extrahieren ich wissen muss, dass AcquisitionMode ist 3 um das in einen anderen int AcqMode zu schreiben. Gibt es einen eleganteren Weg, als 15 andere Aussagen zu schreiben? mein Strom:

if (line.Contains("FrameTransferAcquisitionMode")) { LabelTemp2.Text = Regex.Match(line, @"\d+$").Value.ToString(); } 
else if (line.Contains("AcquisitionMode")) { LabelTemp1.Text = Regex.Match(line, @"\d+$").Value.ToString(); } 

ignorieren die labeltemps, die für Testzwecke sind nur Dank

+4

können Sie verwenden Dictionary > anstelle Wenn ist – tym32167

+0

Haben Sie eine Kontrolle über das Format von die Textdatei? Wenn ja, würde ich XML oder JSON verwenden und dann eine der eingebauten Bibliotheken verwenden, um die Informationen zu extrahieren. –

+1

Sie können dies ziemlich leicht zu einer Reihe von Schlüssel/Wert-Paaren analysieren, aber es ist nicht klar aus Ihrer Frage, was Ihr Endspiel ist. Was versuchst du mit den Daten zu machen, nachdem du sie gelesen hast? –

Antwort

3

Sie können eine Karte zwischen den verschiedenen erwarteten Modi und Etiketten erstellen:

Dictionary<string,Label> modeMap = new Dictionary<string,Label>() 
{ 
    { "FrameTransferAcquisitionMode", LabelTemp2 }, 
    { "AcquisitionMode", LabelTemp1 }, 
}; 

dann Extrahieren Sie den Modus aus der Zeile und führen Sie eine Suche im Wörterbuch aus:

string mode = line.Split('=')[0]; 
Label label; 
if(modeMap.TryGetValue(mode, out label)) 
{ 
    label.Text = Regex.Match(line, @"\d+$").Value.ToString(); 
} 
Aktualisieren
+0

Schätzen Sie es! Wusste nicht, dass es dict in C# gab, thx! –

0
var lines = File.ReadLines("settings.ini"); 
var lookup = lines.ToLookup(l => l.Split('=')[0], l => l.Split('=').ElementAtOrDefault(1)); 

string sAcquisitionMode = lookup["AcquisitionMode"].FirstOrDefault(); // null if not found 
int AcqMode; 
int.TryParse(sAcquisitionMode, out AcqMode); // AcqMode is set to 0 if the sting can't be parsed 

Alternative, die die Datei als XML zu analysieren versucht

var text = File.ReadAllText("settings.ini").Trim().Replace("\r\n", "' ").Replace("=", "='"); // Example: "a=1" to "a='1'" 
//text = text.Replace("[", "").Replace("]", "='"); // optional if your file has any [sections] Example: "[a]" to "a=''" 
var x = XElement.Parse("<x " + text + "' />"); 
int AcqMode = (int)x.Attribute("AcquisitionMode"); // in VB.NET this will be Dim AcqMode = Cint([email protected]) 
Verwandte Themen