problem beim einlesen einer datei und...



  • hallöchen,

    habe folgendes problem, erhoffe mir mal ein paar tipps.
    ich öffne eine txt-datei und lese die mehrzeiligen daten aus, jetzt möchte ich nur eine bestimmt zeile überschreiben... der rest soll gleich bleiben.

    arbeite mit dev und benutze hauptsächlich of- und ifstream



  • Wenn die Zeile nicht kürzer oder länger wird, kannst du einfach über den bisherigen Inhalt drüberschreiben. Andernfalls mußt du zumindest alles hinter der Einfügeposition zwischenspeichern und hinter dem ersetzten Text eintragen.

    (PS: Wenn du ziemlich viel in der Datei rumhantierst, solltest du sie einmal komplett einlesen, dann im Speicher verarbeiten und am Ende komplett zurückschreiben)



  • leider hab ich keinen plan wie ich das angehn soll 😞



  • Hallo

    Lies einfach alle Zeilen mit getline ein und sortieren dann, was du brauchst und was du lieber sein lässt.

    chrische



  • ohne funktionierendes beispiel wird das bei mir wohl nix 😞



  • ok nochmal zum verständnis...

    ich schreibe eine datei mit kunden daten unter anderem auch das alter, da sich dieses aber ändert, möchte ich beim aufrufen der daten also lesen das alter neu berechnen und wieder in die datei schreiben, danach kann man es ja auf dem bildschirm ausgeben....

    also könnte sich die zeilenlänge auch verändern. bsp 9 -> 10

    kann mir nun jemand bitte helfen?



  • Einlesen:

    vector<string>lines;
    ifstream file(name.c_str());
    string line
    while(getline(file,line)
      lines.push_back(line);
    file.close();
    

    Jetzt steht in jedem Element des Vector's eine Zeile der Quelldatei - die kannst du nach Belieben ersetzen, umwandeln oder neu verrechnen.

    Zurückschreiben:

    ofstream file(name.c_str());
    for(int i=0;i<lines.size();++i)
      file<<lines[i]<<'\n';
    file.close();
    

    (eventuell kannst du die Kundendaten auch strukturieren - dann solltest du einen eigenen operator<< und operator>> dafür bereitstellen und verwenden)



  • ich danke dir klappt soweit sehr gut......

    nur verschiebt er mir die dateien, finde irgenwie nicht das richtige mittel um zu überschreiben 😞



  • Du mußt natürlich zum Lesen und Schreiben den selben Dateinamen verwenden, sonst kopiert das Programm die Daten in eine neue Datei.



  • oh sorry war etwas missverständlich...

    ich meine natürlich wenn ich in zeile null was überschreiben will, überschreibt er es nicht, er verschiebt die zeilen nach unten...

    warum ist c++ nur so kompliziert, aber muss ja sein....



  • Wie überschreibst du denn? Eventuell hast du irgendwas falsch eingestellt.



  • int main()
    {
    string name="txt.txt";

    vector<string>lines;
    ifstream file(name.c_str());
    string line;
    while(getline(file,line))
    {
    lines.push_back(line);
    cout << line << endl;

    }cout << "ende ifstream1" << endl;
    file.close();

    ofstream files(name.c_str());
    for(int i=0;i<lines.size();++i)
    {
    if (i == 6)
    {

    files << "überschreibe zeile 0 //" << endl;

    }

    files<<lines[i]<<'\n';

    }

    //files << "test" << endl;
    cout << "ende ofstrem" << endl;
    files.close();



  • Wenn du die Zeile überschreiben willst, mußt du den neuen Inhalt anstelle des ursprünglichen Inhalts in das File schreiben (dein Code schreibt das "überschreibe Zeile 0" zusätzlich zum alten Dateiinhalt).



  • ja und wie geht das? hab es mit sämlichen (ios::...) und (ios_base::...) versucht nix klappt 😞



  • ok ich habs..... wie doooof ich doch bin 😡



  • icketom schrieb:

    ja und wie geht das? hab es mit sämlichen (ios::...) und (ios_base::...) versucht nix klappt 😞

    versuch's mit "else" 😉



  • nochmal danke schön, jetzt stosse ich auf mein nächstes problem:

    ich möchte in der ausgelesenen datei bestimmte zeichenketten auslesen, die in einer bestimmten stelle stehn und auch immer da stehn. diese brauch ich denn in einer variablen zur weiteren berechnung... es handelt sich um integer werte...

    ich bitte den meister mir hinweise zu geben..



  • beispiel:

    name: klaus
    alter: 26
    status: 6

    jetzt beispielsweise nur die 26



  • In Standart C löse ich das problem mit fseek()



  • und wie würde das aussehn?


Log in to reply