fstream
-
Ich will in einer Textdatei z.B nach einem bestimmten Wort suchen und dann die entsprechende Zeile einlesen/bearbeiten.
Kann man irgendwie so den Text in der Datei durchsuchen, oder muss ich erst alles einlesen?
-
string buffer; while(!file.eof()) { file.getline(buffer); if(buffer.find("zusuchenderstring")) //dann soll das passieren, was du möchtest... }
das ist so meine erste idee...
-
@leech:
1. Ich weiss ja nicht, wie es bei dir ist, aber bei mir funktioniert infile.getline(str) nicht, wenn str vom Typ std::string ist.2. Was ist, wenn die Datei mehr als eine Zeile hat?
Caipi
-
und was ist, wenn das zu suchende über mehrere zeilen geht?
-
@leech:
gut damit funktioniert es und mit break muss ich auch nur bis zur entsprechenden Stelle einlesen, aber ne Funktion mit der man gar nichts einlesen braucht, sondern gleich in der Datei suchen kann gibt es nicht, oder?
@Caipi:
Der Befehl heißt ja auchgetline(file, buffer);
es ging ja nur um den Gedankenanstoß...
Und mit mehreren Zeilen gehts auch, denn jeder Schleifendurchlauf ließt eine neue Zeile ein.
@betrug:
das "zu suchende" geht nur über eine Zeile
-
war ja auch nur eine erste idee... und den code habe ich auch nicht getestet... denn die if abfrage müsste doch eigentlich lauten:
if(buffer.find("zusuchenderstring") => 0) //mach was tolles
da find() ja die position zurückliefert,... was ist aber, wenn das zu suchende wort sofort das erste ist? dann liefert er ja 0 zurück.. und 0 == false und dann wird die anweisung ja gar nicht ausgeführt... wenn er es nicht findet, dann liefert er ja string::npos zurück und das ist ja gleich -1....
[quote="Caipi]
2. Was ist, wenn die Datei mehr als eine Zeile hat?
[/quote]
den einwand verstehe ich nicht... er führt es doch solange aus, bis eof erreicht ist... könntest du es kurz erklären.. denn mit dateien arbeite ich noch nciht so oft....P.S.: das mit dem file.getline(buffer) war mein fehler... das geht natürlich nicht... richtig muss es lauten:
getline(file, buffer);
-
die if-abfrage is bei mir eh noch n bischen anders, aber das is jetzt egal (lech hat mit seinem einwand aber schon recht)
eine Frage ist aber immer noch nicht geklärt:aber ne Funktion mit der man gar nichts einlesen braucht, sondern gleich in der Datei suchen kann gibt es nicht, oder?
jemand ne ahnung
-
kann ich mir nicht vorstellen, glaube nicht das es sowas geben sollte.
-
Möglicherweise wenn man mit find aus istream_iterator<string> arbeitet?
-
hm, ok
aber noch was anderes, was ist eigentlich der genaue Unterschied zwischen
ios::ate und ios::app???
-
ios::app Ausgabe an Datei anhängen
ios::ate Ausgabe an Datei anhängen, erlaubt nach erster Schreibanweisung Verschieben des Dateipointers