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-8G5FVerzeichnis von D:\
16.02.03 08:23 <DIR> Ordner1
18.02.03 14:23 <DIR> Ordner2
2 Datei(en) 0 BytesVerzeichis von D:\Ordner1
16.02.03 14:12 <dir> OrdnerX
16.02.03 14:12 12.165 datei1.txt
2 Datei(en) 12.165 BytesVerzeichis 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.getlineUnd hier die nächste:
dateiLese >> date >> time >> size >>nameDu 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.txtnur 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