Zahlendaten aus Datei filtern und zur Verarbeitung in ein Array schreiben
-
Hallo,
ich habe folgendes Problem:
Es gibt Dateien mit Messdaten vom Typ Int und float. Darin enthalten sind zusätzlich Zeichenketten, die beschreiben, um was für Daten es geht, z. B:MRR 110424191300 UTC AVE 60 STP 100 ASL 165 SMP 125e3 NF0 1.000 NF1 0.000 SVS 5.20 DVS 5.10 D SN 080101 CC 1280000 MDQ 100 H 100 200 200 400 600 600 700 800 900 1000 1100 1300 1500 140 0 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 Z -30.37 -7.14 -4.88 -2.30 -1.29 -0.76 -3.05 -0.20 -0.59 -3.47 -1.09 -4.52 -0.3 1 -3.72 -5.55 -0.95 -7.64 -4.29 -3.42 -4.92 -1.18 -2.03 -13.60 -6.11 -0.08 0.33 1.38 -3.64 - RR 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 ... ...Die ersten Informationen stehen für das jeweilige Messgerät, Datum usw. Danach kommen die eigentlichen Messdaten, sortiert nach "Art" (H,Z,RR)der Messung.
Ich möchte diese Daten in entsprechende Arrays schreiben, um sie dann zu manipulieren (zum Beispiel einzeln zu Plotten, aber darum muss es erst mal noch nicht gehen).
Ich habe auch schon eine kleine Klasse geschrieben, die es mir erlaubt, die jeweiligen Dateien zu öffnen. Ferner habe ich rausgefunden, dass man mit ifstream die Daten auslesen kann.
Womit ich noch Schwierigkeiten habe, ist, das mit den Arrays zu begreifen, bzw. wie ich das Auslesen so managen kann, dass das Programm selbstständig die richtigen Daten in das zugehörige Array schreibt (Also so etwas wie pattern matching beim Auslesen). Es muss ja für jeden Typ (Im Beispiel oben H, Z RR) ein eigenes Array gemacht werden, dass dann 1 bis n-stellige Zahlen (mit max(n) =7) einließt, wobei nicht bekannt ist, wann eine Zahl welche Stelligkeit hat. Lediglich der Datentyp und die Anzahl der Datensätze ist jeweils klar.
Trennzeichen sind offensichtlich Leerzeichen und Newline..., ich weiß aber nicht, wie ich das beim Auslesen einbeziehen kann. Wäre dankbar für ein Codefragment, welches das Prinzip klar macht, wie man da dran gehen kann. Da ich noch ziemlicher Anfänger bin habt ein bisschen Nachsicht, wenn ich das eine oder andere noch nicht kenne
(Ach ja, was ein Array ist und wie man eines erstellt und initialisiert, ist mir schon klar
)Bester Gruß
Fritz
-
Ein Ansatz wäre es, die Datei zeilenweise per getline() einzulesen und anschließend jede Zeile in ihre Bestandteile zu zerlegen (ich würde einen Stringstream und std::copy() verwenden, um die einzelnen Zahlen in einen Container zu schieben).
-
Super schnelle Antwort - mein Kompliment
- Hatte ich schon befürchtet, dass mir etwas vollkommen neu sein wird: Was ist ein Container? Ich fürchte da muss ich mich erst mal eingehender mit befassen... Ich melde mich, wenn ich mir da man einen Überblick dazu verschafft habe. Aber danke für den Hinweis
Wenn ich einen Stringstream verwende muss ich dann alles nach int bzw. float zurückcasten oder?
-
Ein Container ist vector<>, deque<>, map<> etc. - das sind Klassen zur Unterbringung von Daten, die wesentlich leichter verwendet werden können als Arrays.