zeilen in Text datei ändern

slaveZero

Grünschnabel
hallo
ich benutze die klasse ofstream und schreibe mit dem operator<< in eine text datei sachen rein die jeweils mit einem ';' getrennt sind
jetzt würde ich gerne wissen wie ich aus der Text datei zeilen löschen kann? oder ändern?
gibts da eine methode? ich find nämlich nix
vielleicht gibts ja ne bessere möglichkeit in text dateien zu schreiben
für das auslesen benutz ich die methode getline von der klasse ifstream!
 
hi
dir bleibt wahrscheinlich nix anderes übrig, als den Inhalt der Datei zu überschreiben.
Am einfachsten ist es wohl alles einzulesen, die entsprechende zeile rauszulöschen und wieder alles zu schreiben.
Du kannst aber auch mit dem schreib cursor zur entsprechenden Zeile springen und ab dort alles überschreiben.
 
Genau bei dem habe ich auch ein Problem. Das mit dem Cursor dort hinspringen ist wahrscheinlich zu schwierig für mich aber ich habe das mal etwas geschrieben, vielleicht dass mir jemand meine Fehler verbessern kann:
PHP:
fstream datei("Ablage.txt", ios::in);
     
    string zeile;
    int j;
    int i = 0; 

    for (j=0;j==3;j++)
    {
        while ( !datei.eof() ) 
        { 
        getline(datei, zeile); 
        i++; 
        }
    }
    
                    if (getline(cin,zeile)) 
                  {
                                     
                                     datei << zeile << endl;                      
                                     
                    
                  }

Jetzt habe ich mir vorgestellt, dass ich irgend wie die Zahl der Zeile eingeben kann und dannach es mir genau diese Zeile ausgibt auf den Bilschirm und ich ihn nochmals eingeben kann.
Leider funktioniert dieser Code nicht, aber es kommt auch kein Fehler, kann mir jemand vielleicht sagen was ich vergessen habe
 
Du ließt einmal ein und gibst das direkt aus?! Was erwartest du von dem Code? (TIPP: Deine Bedingung in der for-Schleife ist direkt nicht erfüllt und damit wird die Schleife nie durchgegangen ;))
 
Ich habe mir vorgestellt, dass 'j' die zahl ist, der zeile die ich ändern will, also das es die zeilen abzählt, also hier im beispiel 3, und ich dann an der zeile den neüen text eingeben kann und so den alten text überschreibt.
Wieso läuft die for schleife nicht durch, anfangswert ist doch '0', die schleife erhöht jedesmal um '1' bis j=3 ist, oder was hab ich da nicht verstanden?
Gruss
 
Als Bedingung musst du schreiben j<3
Die Schleife wird durchlaufen, SOLANGE die Bedingung erfüllt ist, nicht BIS zur Erfüllung
 
danke, habe ich nun geändert, aber leider hat es mir im .txt file die zeile immer noch nicht geändert, ich habe keine ahnung was da noch falsch ist.
kannst du mir vielleicht noch ein tipp geben?
 
Warum probierst du eigentlcih 3 mal die ganze Datei einlesen?
statt diesem while im for wäre ein if vielleicht angebrachter
 
Okay erstmal die auffälligen Fehler, du wirst später feststellen das es immer noch nicht geht weil die Lese/Schreib-Zeiger nicht identisch sind, aber okay:
C++:
std::fstream datei("Ablage.txt", std::ios_base::in);
Du willst nachher was in die Datei schreiben, öffnest aber nur zum Lesen?

C++:
int j;
brauchst du das außerhalb der Schleife? Wird der Wert jemals < 0? UND wird er jemals so groß?
C++:
int i = 0;
brauchst du eigtl. garnicht .... ;)

C++:
for (j=0;j==3;j++)
Abbruchbedingung muss durch Bedingung ersetzt werden. Und Pre-Inkrement ist (meist) schneller als Post-Inkrement.
C++:
 {
        while ( !datei.eof() ) 
        { 
        getline(datei, zeile); 
        i++; 
        }
    }
Du versuchst (auf eine falsche Weise) jedesmal die ganze Datei einzulesen?! (und i ist überflüssig ...)

C++:
datei << zeile << endl;
Probier's mal aus mit korrigiertem Quellcode ;) Es wird nicht klappen :D (Lese/Schreibzeiger halt ;))

C++:
#include <iostream>
#include <fstream>
#include <string>
#include <limits>

int main()
{
    std::fstream file_stream("Ablage.txt", std::ios_base::in | std::ios_base::out);
    if (!file_stream)
    {
        std::cerr << "FEHLER: Datei konnte nicht geöffnet werden!";
        return 1;
    }

    for (std::size_t i(0); i < 3; ++i)
        file_stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    std::string new_line;
    if (std::getline(std::cin, new_line)) file_stream << new_line << std::endl;
}
 
Zurück