txt.Dateien Lesen, kopieren, speichern



  • Hallo Jungs und Mädels;

    ich programmiere seit einigen Wochen hobbymäßig mit c++ und habe mir wieder mal ein kleines Programm überlegt.

    Jedoch komme ich nicht so wirklich weiter:-(

    1. ich möchte von einer Textdatei eine bestimmte zeile auslesen
    2. dann die gesamte textdatei kopieren
    3. diese dann mit der ausgelesenen zeile aus der alten Textdatei benennen

    Leider funktioniert die sache noch nicht so wie ich will.

    Hier mein bisheriger Code:

    #include <string>
    #include <iostream>
    #include <fstream>

    using namespace std;

    int main(void)
    {
    for (int n=1; n< 10; n++)
    {
    ifstream Quelldatei;
    Quelldatei.open("D:\\Datei.txt", ios_base::in);

    if (!Quelldatei)
    cerr << "Fehler - Quelldatei kann nicht geöffnet werden";

    else {

    ofstream Zieldatei("D:\\Datei_2.txt");

    if (!Quelldatei && !Zieldatei)

    cerr << "Fehler - Zieldatei kann nicht ausgegeben werden";

    else {
    char c;

    while(Quelldatei.get(c))
    {
    Zieldatei.put(c);
    }

    }
    }

    }

    system("pause");
    return 0;

    }

    Punkt 2 habe ich bereits gelöst.

    Punkt 1 würde ich gerne so lösen, dass ich unterhalb des ifstreams eine "getline()" einbaue
    -> ist das so möglich?

    Punkt 3 würde ich gerne so lösen, dass ich in den ofstream einfach die gelesene Zeile aus punkt 1 schreibe

    Ist diese Herangehensweise ok oder muss ich da komplett umdenken?

    Danke schon mal für eure Antworten Jungs & Mädels 😉



  • dieSocke schrieb:

    1. ich möchte von einer Textdatei eine bestimmte zeile auslesen

    ...

    Punkt 1 würde ich gerne so lösen, dass ich unterhalb des ifstreams eine "getline()" einbaue
    -> ist das so möglich?

    Jein. Wenn alle Zeilen gleich lang sind, und Du weißt oder ermitteln kannst, wie lang sie sind, dann könntest Du den Offset der gewünschten Zeile in der Datei berechnen und Dich dort positionieren.
    Eine ganz normale Textdatei hat aber ganz unterschiedlich lange Zeilen. Deshalb geht da nur, x Zeilen überlesen (einlesen und verwerfen), um an die x + 1 ste Zeile zu kommen.


  • Mod

    Umbenennen ist ein bisschen kompliziert, wenn du nur Standardmittel benutzen möchtest, wesentlich einfacher wird das, wenn du Betriebssystemmethoden nutzt, entweder direkt oder schön portabel weggekapselt, z.B. mit Boost::Filesystem.

    Aber wenn du davon ausgehen kannst, dass die Datei klein genug ist für den Arbeitsspeicher des Computers, dann kannst du sie auch einfach komplett einlesen und dann der Ausgabedatei gleich den richtigen Namen geben.

    Zum Lesen: Nun, wenn die Zeilen eine Rolle spielen, dann bietet sich schon irgendwie getline an. Ohne das Format zu kennen, kann ich keine Optmierungsideen benennen, aber allgemein würde ich folgende Zutaten benutzen:

    - Datei öffnen
    - Alle Zeilen aus Datei in vector<string> lesen
    - Ausgabedatei mit passendem Namen öffnen, dazu den passenden Eintrag aus dem vector<string> wählen
    - Alle Einträge aus vector<string> in Datei schreiben
    - Fertig
    


  • @ Belli

    ich hoffe du hast mich da richtig verstanden

    ich will eine bestimmte zeile aus einer txt-datei lesen und diese dann wieder verwenden

    ich nimm jetzt einfach mal an, dass der kopf dieser datei immer gleich aussieht, dann müsste es doch so möglich sein oder?



  • @ SeppJ

    das format ist ne txt.-Datei keine binär etc.

    code:
    - Datei öffnen
    - Alle Zeilen aus Datei in vector<string> lesen
    - Ausgabedatei mit passendem Namen öffnen, dazu den passenden Eintrag aus dem vector<string> wählen *
    - Alle Einträge aus vector<string> in Datei schreiben
    - Fertig

    * das müsste ich doch dann mit "ofstream Zieldatei("D:\\vector<string>");" realisieren können oder?


Anmelden zum Antworten