Code vereinfachen
-
Abend,
ich habe eine Textdatei, die aus vielen Zeilen mit je 2 Wörtern (Key und Value) besteht:
Name Foo Binding Unit1 AddressU Wrap ...Das will ich jetzt einlesen. Im Moment iteriere ich dazu in einer Schleife über die Zeilen und mache dann das:
if(strHasPrefix(tokens[0], "Name")) mName = tokens[1]; else if(strHasPrefix(tokens[0], "Binding")) mBinding = tokens[1]; else if(strHasPrefix(tokens[0], "AddressU")) mAddressU = tokens[1]; ...Geht natürlich, nur stört mich, dass das über viele Zeilen sehr geht, obwohl alles doch ähnlich ist. Kann man das verkürzen und eleganter machen?
Ich dachte zunächst an eine map, also sowas: myMap[tokens[0]] = tokens[1];
Das Problem dabei ist nur, dass das dann keine Validierung macht. Der würde dann blind alle Keys in die Map hauen, auch wenn es garkeine Schlüsselwörter sind.
-
Soll er fehlende Tokens mit Standardwerten belegen?
Soll er ungültige Tokens schweigend verschlucken? Mit Fehlermeldung raus?
-
Map ist schon ein guter Ansatz, aber an der Stelle würde ich vermutlich nicht den Index-Operator nutzen, sondern find():
MyMap.insert(make_pair("Name", "")); MyMap.insert(make_pair("Binding", ""); ... map<string,string>::iterator pos = MyMap.find(tokens[0]); if(pos!=MyMap.end()) pos->second = tokens[1]; else cout<<"Fehler bei Eingabe - unbekanntes Token\n";