fstream, Datei Zeilenweise einlesen, 1. Char der Zeile prüfen
-
Hallo an alle,
Als absoluter Programmieranfänger, vor allem was C++ angeht, erbitte ich euren Rat.
Was möchte ich machen?
Ich habe eine Textdatei, die wie folgt formatiert ist:
@<infotext1> //konstant @<infotext2> //konstant @<text1> <text2> @<text3> <text4> @<text5> <text6> ...
Diese möchte ich in x Dateien aufteilen, die jeweils folgendes enthalten:
@<infotext1> @<infotext2> @<text x> <text x+1>
Meine Ideee ist es, die Anzahl der Texte anhand der Anzahl der '@' Chars ab der dritten Zeile der Originaldatei zu ermitteln.
Aus der Anzahl der Texte ergibt sich die Menge der Textdateien die erstellt werden müssen.
Jede erstellte Textdatei erhält (zusätzlich zu den Infotexten) Text x und x+1.
(Siehe Oben)Der folgende Code erlaubt mir schonmal den Text aus meiner Datei zeilenweise auszulesen:
#include "stdafx.h" #include "fstream" #include "iostream" #include "string" using namespace std; int main() { string dateiname; int anzahl = 0; // Maximal 500 Zeichen pro Zeile const int ZEILENLAENGE = 500; cin >> dateiname; cout << endl; fstream datei(dateiname, ios::in); char zeile[ZEILENLAENGE]; while (datei.getline(zeile, ZEILENLAENGE)) { } system("PAUSE"); return 0; }
Nun stelle ich mir das so vor, dass ich das erste Zeichen jeder Zeile darauf überprüfe, ob es ein '@'-Zeichen ist.
Wenn das der Fall ist, soll sämtlicher Text ab dem '@'-Zeichen in die erste Datei geschrieben werden.
Der Text nach dem 2. '@'-Zeichen in die zweite Datei und so weiter.Was mir fehlt ist die Möglichkeit, mit meiner Schleife einzelne Chars aus meinem Char-Array auf ein bestimmtes Zeichen zu überprüfen. In Der C++ Referenz habe ich schon unter basic_fstream get, getline und peek geschaut.
Mit den Infos konnte ich allerdings nicht sehr viel anfangen.Was möchte ich Wissen?
Ist meine Idee realistisch?
Womit sollte ich mich diesbezüglich beschäftigen / Was sollte ich mir ansehen
Geht es eventuell einfacher?Ich möchte keine Musterlösung, schließlich will ich dabei auch was lernen.
Über Denkanstöße oder Hinweise auf Machbarkeiten bezüglich meiner Anfrage würde ich mich allerdings riesig freuen.Freundliche Grüße
wungzunglung
-
zeile ist ein Array. Da kannst du auf einzelne Elemente sehr leicht zugreifen.
if (zeile[0] == '@')
Musst du wirklich die Anzahl der Dateien wissen?
Oder kannst du gleich beim ersten Durchgang die neuen Dateien öffnen, Zeilen reinschreiben und schließen.
-
Durch die Anzahl der Texte in meiner Datei weis ich wie viele neue Textdateien ich erstellen muss. Aber du hast natürlich Recht.
Ich kann auch jedes mal eine neue Datei erstellen lassen, sobald ich eine neue Textpassage in meiner Originaldatei finde.Also wäre alles in einem Durchgang machbar.
Vielen Dank schonmal mit dem Hinweis auf das Array, hätte nicht gedacht, dass es so einfach geht.