PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : fstream mir C++ Builder


Johnny
2004-09-05, 12:09:17
Hi all,
Ich habe folgendes Problem: ich möchte eine Textdatei mit fstream auslesen und zum selben Zeitpunkt auch ändern. Das sieht so aus:

fstream f("betrieb.txt");
f.seekg(0, ios::beg); //setzt den cursor am anfang der datei

while(f.good())
{
f>>zeile; //liest einen string bis zum nächsten leerzeichen ein
if(zeile==Edit1->Text.c_str())
{
f>>zeile;
f<<Edit2->Text.c_str(); //schreibt einen inhalt in die datei
f>>zeile;
f<<Edit3->Text.c_str();
}
}

Dieses funktioniert aber nicht, da die Inputaktionen (z.B. f<<Edit3->Text.c_str();) nicht ausgeführt werden. Nach langem rumprobieren habe ich festgestellt, dass Input- und Outputaktionen im selben Ereignis nicht ausgeführt werden können, z.B. wenn ich die Outputbefehle ausklammere, wird die Datei wie gewünscht beschrieben. Also, was meint ihr wie ich das lösen kann und wiso meins nicht funktioniert. Danke!

Asmodeus
2004-09-07, 09:44:59
Hi all,
Ich habe folgendes Problem: ich möchte eine Textdatei mit fstream auslesen und zum selben Zeitpunkt auch ändern. Das sieht so aus:

fstream f("betrieb.txt");
f.seekg(0, ios::beg); //setzt den cursor am anfang der datei

while(f.good())
{
f>>zeile; //liest einen string bis zum nächsten leerzeichen ein
if(zeile==Edit1->Text.c_str())
{
f>>zeile;
f<<Edit2->Text.c_str(); //schreibt einen inhalt in die datei
f>>zeile;
f<<Edit3->Text.c_str();
}
}

Dieses funktioniert aber nicht, da die Inputaktionen (z.B. f<<Edit3->Text.c_str();) nicht ausgeführt werden. Nach langem rumprobieren habe ich festgestellt, dass Input- und Outputaktionen im selben Ereignis nicht ausgeführt werden können, z.B. wenn ich die Outputbefehle ausklammere, wird die Datei wie gewünscht beschrieben. Also, was meint ihr wie ich das lösen kann und wiso meins nicht funktioniert. Danke!

Richtig ist, dass beim Lesen und Schreiben das Streamobjekt vom Typ fstream sein muss. Ausserdem solltest Du aber beim Anlegen des Objektes das Lese- und das Schreibflag setzen (ios::in und ios::out). Dann musst Du beachten, dass Du zwei verschiedene Zeiger verwenden musst. Einmal den Get-Zeiger zum Lesen (seekg) und einmal den Put-Zeiger zum Schreiben (seekp). Dann sollte es auch funktionieren, obwohl das Handling innerhalb einer Datei natürlich etwas kompliziert ist, wenn man liest und schreibt, da man mit den Positionen nicht durcheinander kommen sollte. :wink:

Gruss, Carsten.

Johnny
2004-09-08, 11:02:58
Danke, das mit zwei unterschiedlichen Zeigern wirds woll gewesen sein, werde mal ausprobieren.