Text einlesen... array oder vektor Implementierungshilfe
-
Hallo habe folgendes Problem:
Ich soll eine Textdatei einlesen und die darin gespeicherten Werte sinvoll verarbeiten.
Das mache ich derzeit mitstring s; ifstream in("test.txt"); // öffne datei while(getline(in, s)) ...
Die Datei sieht etwa so aus:
" 94"," 86"," "
Am Ende sollen die Messwerte miteinander verrechnet werden. 2 "Spalten" wären also ganz nützlich.
Habe bisher rudimentäre Erfahrungen mit c++ gemacht. Deshalb meine Frage:
Wie würde man das am besten Implementieren. In ein Array schieben, als String belassen oder doch nen Vektor?
Kann man während des Einlesens schon die " und , filtern und wenn ja wie?
Es sind ungefähr 10000 Zeilen zu verarbeiten.Ich arbeite derzeit mit VisualStudio.net. Es soll aber eine Konsolenanwendung bleiben und so portabel wie möglich sein.
Hat jemand vielleicht nen Codebeispiel oder Anregungen?
Danke schon mal
lucky
-
also ich würds auf jedenfall in eine stl containerklasse ballern... allein schon weil ich kein bock habe mich mit der speicherallokierung rumzuärgern...
wie du die datei auslesen willst ist geschmacksache... für sowas lese ich meist auch immr ne zeile ein und parse die von hand (meine lieblingsc-funktion in diesem zusammenhang ist strtok) aber das ist wie gesagt geschmackfrage...
es kommt vor allen dingen darauf an ob die zeilen bei dir immer gleich aussehen (von den messwerten mal absehen) also ob immer hockomma lerzeichen zahl hockomma kommt... und das eine feste anzahl mal... dann könntest du z.b. auch ganz gut sscanf zum parsen verwenden...
naja gibt auch c++-möglichkeiten das zu lösen aber ich mach das string parsen meist immer c-like so das ich bei c++ keine wirkliche empfehlung geben kann und will...
-
Erklär das mal mit der Kontrainerklasse näher bitte.
Am Ende brauch ich im Prinzip 2 Spalten. Muss häufig auf den Verlauf der Messwerte zurück greifen, da am Ende Daten an eine grafische Auweertung übergeben werden sollen. (Messkurve)
Ich komme von der Shellprogrammierung (und perl)-im Gegensatz zu C++ doch etwas anders vom Aufbau.Zu den Daten:
Die sind alle in diesem Format. Also "","" Lediglich die Messwerte variieren.
Ich könnte eine Funktion gebrauchen, die mir lediglich Zahlen liest und den Rest filtert. (sonst muss ich soviel suchen/ersetzen)
Bis jetzt kenne ich nur die find() Funktion. Aber es gibt doch sicher komfortablere oder etwa nicht?by the way:
Wie bekomme ich denn den String (bzw. die Messdaten) in ein arry. Mein Compiler sagt mir immer Typenkonvertierung nicht möglich...
Greez
lucky
-
hmm du wirst ja vermutlich in jeder zeile irgendwie zusammengehörige messwerte haben
dafür würd ich mir erstmal ein struct basteln das eine zeile aufnehmen kann
typedef struct{double wert1; int tralala;......}messwertdatensatz; //oder wie auch immer so ein datensatz bei dir aussieht
so und jetzt legst du z.b. einen std::vector an
std::vector<messwertdatensatz> messwertearray;
//hier immer eine zeile aus der datei auslesen und dann den string eventuell mit strtok parsen (schau mal in die doku von strtok ist eigentlich ziemlich intuitiv zu bedienen...wenns immer die gleichen zeilen sind ausser das sich die werte ändern ist wahrscheinlich sscanf einfacher zu verwenden messwertdatensatz tmp; //hier ballerst du dann deine zeile rein //und dann jagst du sie in den vector messwertearray.push_back(tmp); //den vector kannst du benutzen wie ein normales array und er kann halt noch ne ein wenig mehr...
-
Vielen Dank für die Anregungen. Werde jetzt erst mal ein paar Tage herumprobieren und dann mal schauen ob was vernünftiges bei rauskommt.
wenn jemanden noch was einfällt...nur zu
THX@all
lucky
-
lucky_streikt schrieb:
Kann man während des Einlesens schon die " und , filtern und wenn ja wie?
luckyHi
Guck dir doch mal istream::ignore an. Das dürfte dir weiterhelfen.