brauche dringend HILFE!!! Datei (txt) auslesen und ändern.



  • Hallo ich bin noch neu in der c++ ecke und hab ein echtes problem bei dem ich nicht mehr weiterkomme!!!
    ich muss ein prg schreiben das die daten einer datei (inhalt.txt) ausliest und in eine neu erstellte datei formatiert wieder einfügt.
    Bsp.:

    Inhalt von "Inhalt.txt" :

    Datenträger in Laufwerk C: hat keine Bezeichnung
    Datenträgernummer: 2154-8G5F

    Verzeichnis von D:\

    16.02.03 08:23 <DIR> Ordner1
    18.02.03 14:23 <DIR> Ordner2
    2 Datei(en) 0 Bytes

    Verzeichis von D:\Ordner1
    16.02.03 14:12 <dir> OrdnerX
    16.02.03 14:12 12.165 datei1.txt
    2 Datei(en) 12.165 Bytes

    Verzeichis von D:\Ordner2

    16.02.03 14:12 12.100 datei2.txt
    16.02.03 14:12 180.500 datei3.BAK
    16.02.03 14:12 7.500 datei4.MOD
    3 Datei(en) 200.100 Bytes

    .
    .
    .

    *** es können auch mehr ordner und dateien drinstehen aber der aufbau ist immer gleich.

    die datei soll nun in eine neue datei z.b.: ausgabe.txt formatiert geschrieben werden:

    D:\ordner1\datei1.txt 16.02.03 14:12 12.165
    D:\ordner2\datei2.txt 16.02.03 14:12 12.100
    D:\ordner2\datei3.BAK 16.02.03 14:12 180.500
    D:\ordner2\datei4.MOD 16.02.03 14:12 7.500

    .
    .
    .

    ****Aufbau immer wie oben: "Pfad, Dateiname, Datum, Uhrzeit, Dateigröße"

    alle leerzeilen sollen weg!
    alle zeilen mit "<dir>" sollen weg, nur die Dateien!!!
    alle zeilen mit verzeichnis von sollen weg.
    die Datenträgerzeilen sollen auch weg.
    *****

    ich habe folgenden programmcode schon weiß aber nicht genau wie es weitergeht:

    #include <fstream.h>
    #include <strstream.h>
    #include <string>
    #define SEARCHMARK1 " <DIR> "
    #define SEARCHMARK2 "Datentr"
    #define SEARCHMARK3 "Verzeichnis von"
    #define SEARCHMARK4 "Datei(en)"
    
    int main()
    {
        char zeile[121];
        string Seite[10000];
    
        ifstream dateiLese ("eingabe.txt");
        ofstream dateiSchreibe ("ausgabe.txt");
        if (dateiLese)
        {
            int i=0;
            while (dateiLese.getline (zeile, 120))
            {
                Seite[i]=zeile;
                if (Seite[i] != "")
                {
                    if (strstr(zeile,SEARCHMARK1)==NULL  
                        && strstr(zeile,SEARCHMARK2)==NULL 
                        && strstr(zeile,SEARCHMARK4)==NULL)
                    {
                        if (strstr  (zeile,SEARCHMARK3)==NULL)
                        {
                            string date, time, size, name;
                            dateiLese >> date >> time >> size >>name;
                            dateiSchreibe << "\n " << date << " " << time << " " << size << " " <<name;
                        }
    
                    }
                i++;
                }
                dateiLese.close ();
                dateiSchreibe.close ();
        }
        exit(0);
    }
    

    ***** und macht folgende ausgabe

    16.05.03 11:21 0 inhalt.txt
    01.01.01 02:00 937 PALATIPX.INI
    01.01.01 02:00 2.794 S5_Simona.CDL
    23.11.99 13:22 63.360 TEST.BAK
    23.11.99 13:22 45.920 TEST.SEQ

    *****das ist aber immer nur jede zweite Datei!!!!

    ich bräuchte dringend hilfe und wäre für jeden beitrag dankbar

    gruß tarikon

    😃

    Bitte Code-Tags verwenden!

    [ Dieser Beitrag wurde am 05.06.2003 um 11:27 Uhr von HumeSikkins editiert. ]



  • Hier liest du eine Zeile ein:
    dateiLese.getline

    Und hier die nächste:
    dateiLese >> date >> time >> size >>name

    Du suchst in der ersten Zeile nach den Suchbegriffen, und verarbeitest dann die zweite. Logisch, dass dann nur jede zweite Zeile in der Ausgabedatei steht.

    Wenn du aus zeile einen istringstream konstruierst, und die Einzelstrings daraus anstatt aus dateiLese holst, sollte es funktionieren.



  • #include <fstream.h>
    #include <strstream.h>
    #include <string>
    #define SEARCHMARK1 " <DIR> "
    #define SEARCHMARK2 "Datentr"
    #define SEARCHMARK3 "Verzeichnis von"
    #define SEARCHMARK4 "Datei(en)"
    

    is nicht empfehlenswert
    eher:

    #include <fstream>
    #include <sstream>
    #include <string>
    using namespace std;
    
    const char * const S1 = " <DIR> ", * const S2 = "Datentr";
    const char * const S3 = "Verzeichnis von", * const S4 = "Datei(en)";
    

    Dann musst du außerdem die neueren stringstreams statt den strstreams verwenden. Und zwar so:

    istringstream in("hallo, welt!");
    string s1, s2;
    in >> s1 >> s2;
    
    // bzw. 
    ostringstream out;
    out << s1 << "//" << s2 << endl;
    cout << out.str();
    


  • thx 🙂
    hat funktioniert das jede zeile ausgegeben wird.

    aber wie kann ich

    Verzeichis von D:\Ordner1
    16.02.03 14:12 <dir> OrdnerX
    16.02.03 14:12 12.165 datei1.txt

    nur den pfad auslesen so das er mir diesen wie folgt hinschreibt:

    D:\ordner1\datei1.txt 16.02.03 14:12 12.165.

    den abschnitt "datei1.txt 16.02.03 14:12 12.165." ist kein problem nur
    das er in der zeile "verzeichnis von D:/Ordner1"
    den "D:\ordner1\" ausliest und in die zeile schreibt bekomm ich nicht hin.

    mfg tarikon


Anmelden zum Antworten