Formatierte ASCII datei lesen
-
HAllo Liebe C++ Programmierer,
ich bin ein Einsteiger von Fortran auf C++. ich habe mal problem beim formatierte Dateien auslesen. ich habe eine Datei, in der 62483 zeile und 3 spalten gibt.
Erste Spalte hat integer zahlen zweite float zahlen und dritte character.
das Format vonder datei ist so 8 Zeichenplatz als integer, 6 Zeichenplatz als float, und 28 Zeichenplatz als Character. Also anderes gesagt, %8i, %6f, %28c ist das Format von der Datei. So die Frage Wie kann ich diese Datei lesen.
Unter Fortran ist das ein kinder spiel. Aber Es sieht so aus dass es unter c++ nicht so einfach ist. Ich bin seit 2 tage am Bücher lesen, googlen und Forum durchsuchen, aber leider mit keinen Erfolgs. Kann jemand mir bitte das erklären wie ich das machen kann. Ich danke allen im Voraus für ihre gegebene Mühe.
MfG
-
std::ifstream inputStream("file.dat"); int integer; float real; std::string characters; while(inputStream >> integer >> real >> characters) { // mach was damit, speichere sie ab oder sonst was. }Die Streams ignorieren Whitespaces automatisch. Hier wird also ein int eingelesen, danach ein float und am Ende noch ein Wort. Zwischen den Einleseoperationen werden die Whitespaces immer ignoriert.
Ich empfehle dir ein gutes C++ Buch zu kaufen. Einfache Anfängerbücher:
- C++ Primer
- Thinking in C++ 1&2 (Auch gratis als PDF verfügbar, aber englisch)Anfängerbuch mit deutlich steilerer Lernkurve:
- Die C++ Programmiersprache von Bjarn Stroustrup
(bzw. The c++ programming language, falls du es in Englisch willst)Grüssli
-
Ist da irgendein Trennzeichen (Leerzeichen) dazwischen? Wenn ja, dann kann man einfach
inputfilestream >> integervariable >> floatvariable >> stringvariable;machen. Wenn es kein Trennzeichen gibt, würde ich die ganze Zeile in einen String lesen und den dann an den bekannten Trennstellen auseinanderschneiden. Die einzelnen Fragmente können dann über einen Stringstream in das gewünschte Datenformat überführt werden.
edit: 8 Sekunden zu spät...

-
SeppJ schrieb:
edit: 8 Sekunden zu spät...

Naja, du hast aber noch eine gute Sache reingebracht. Hätte nicht daran gedacht, dass jemand keine Whitespaces dazwischen setzen würde

Edit: Zum ganze Zeilen einlesen:
http://www.cplusplus.com/reference/string/getline/Grüssli
-
Ich danke euch alle ganz herzlich, dass ich so schnell und hilfsreiche Antworten gekriegt habe. meine Datei sieht so aus
____6784__0.05__hier_kommen_die_texte_mit
jede "_" bedeutet ein leere Zeichenplatz. D.h in der datei nehmen die Werte macnhmal Ihre maximale Größe aber zwischen jede array bleibt natürlich mindestens ein leer zeichen.
-
Unter der Annahme, dass _ ein Platzhalter in diesem Forum für ein Leerzeichen ist, dann sollte es halt so aussehen:
// ... while(inputStream >> integer >> real && std::getline(inputStream, characters)) // ...Einziges Problem ist, welches du nun noch hast, dass nun in
charactersauch die Leerzeichen drin sind, welche zwischen dem Float und den Characters sind. Aber eine einfache Left-Trim-Funktion kann man ja schnell programmieren.String Header Referenz:
http://www.cplusplus.com/reference/string/Grüssli
-
es hat wunderbar geklappt. Vielen vielen Dank
Herzliche Grüße