004
23.12.2006, 14:49 Uhr
weed
|
Ich habe es jetzt folgendermaßen geschafft.
C++: |
#include <iostream> #include <fstream> #include <string> using namespace std;
string c2str (char* var) { string rueck = ""; int i = 0; while (var[i]) { rueck += var[i]; i++; } return rueck; }
int main (int argc, char *argv[]) { int i = 1; if (!argv[i]) { printf ("Uebergeben sie Dateien, in denen Vorkommnisse ersetzt werden\nsollen, per Drag and Drop in dieses DOS-Programm!\n"); } else { printf ("Dateien fuer den Replace-Prozess:\n"); while (argv[i]) { printf ("%s\n", argv[i]); i++; }
printf ("\nWelche Teilstringe sollen in den Dateien ersetzt werden?\n"); string replace; getline (cin, replace); printf ("\nWomit?\n"); string with; getline (cin, with);
printf ("\n--- --- Fixen --- ---\n"); i = 1;
int pos; int replaced; string inhalt; char linie[100]; while (argv[i]) { cout << argv[i] << endl; fstream r (argv[i], ios::in); if (!r.is_open()) { cout << " - Konnte nicht geoeffnet werden!" << endl; } else { inhalt = ""; bool weiter = (!r.eof())?true:false; while (weiter == true) { r.getline(linie, sizeof(linie)); inhalt += c2str(linie); if (!r.eof()) { inhalt += "\n"; } else { weiter = false; } } r.close();
fstream w (argv[i], ios::out); if (!w.is_open()) { cout << " - Konnte nicht zum Schreiben mit neuem Wert geöffnet werden!" << endl; } else { replaced = 0; pos = inhalt.find(replace); while (pos != -1) { inhalt.erase(pos, replace.length()); inhalt.insert(pos, with); replaced++; pos = inhalt.find(replace); } w << inhalt; w.close(); cout << " - " << replaced << " Vorkommnisse ersetzt!" << endl; } } i++; } } cout << endl; system ("PAUSE"); return 0; }
|
Wenn ich jetzt eine Textdatei (lol.txt) mit dem Inhalt: [/quote]hallo $epkmn_nr bla $epkmn_nr[/quote]
in die exe reinziehe, werde ich gefragt, welche Vorkommnisse womit ersetzt werden sollen in der lol.txt. Ich gebe ein-> ersetzen: $epkmn_nr womit: $eigen_pkset Dann gucke ich in die txt-Datei rein und es hat sauber funktioniert.
Jetzt ziehe ich gleich 2 txt-Dateien rein udn es funktioniert sauber. In beiden wurden die Vorkommnisse ersetzt und meine DOS-Anwendung sagt sogar, wieviele Teilstrings ersetzt wurden.
Wenn ich jetzt aber eine *.brc Datei reinziehe (Textdatei halt nur mit .brc-Endung), und ich gebe ein, was womit ersetzt werden soll, kommt anstatt eines " - X Vorkommnisse ersetzt" oder im Fehlerfall " - Konnte nciht geöffnet werden" ein Unterstrich und as wars...
Was habe ich da fasch gemacht?
/* edit */
Problem gelöst 8)
C++: |
#include <iostream> #include <fstream> #include <string> using namespace std;
string c2str (char* var) { string rueck = ""; int i = 0; while (var[i]) { rueck += var[i]; i++; } return rueck; }
int main (int argc, char *argv[]) { int i = 1; if (!argv[i]) { printf ("Uebergeben sie Dateien, in denen Vorkommnisse ersetzt werden\nsollen, per Drag and Drop in dieses DOS-Programm!\n"); } else { printf ("Dateien fuer den Replace-Prozess:\n"); while (argv[i]) { printf ("%s\n", argv[i]); i++; }
printf ("\nWelche Teilstringe sollen in den Dateien ersetzt werden?\n"); string replace; getline (cin, replace); printf ("\nWomit?\n"); string with; getline (cin, with);
printf ("\n--- --- Fixen --- ---\n"); i = 1;
int pos; int replaced; string inhalt; char linie[100]; bool weiter; fstream r; fstream w; while (argv[i]) { cout << argv[i] << endl; r.open(argv[i], ios::in); if (!r.is_open()) { cout << " - Konnte nicht geoeffnet werden!" << endl; } else { inhalt = ""; weiter = (!r.eof())?true:false; while (weiter == true) { r.getline(linie, sizeof(linie)); inhalt += c2str(linie); if (!r.eof()) { inhalt += "\n"; } else { weiter = false; } } r.close();
w.open(argv[i], ios::out); if (!w.is_open()) { cout << " - Konnte nicht zum Schreiben mit neuem Wert geöffnet werden!" << endl; } else { replaced = 0; pos = inhalt.find(replace); while (pos != -1) { inhalt.erase(pos, replace.length()); inhalt.insert(pos, with); replaced++; pos = inhalt.find(replace); } w << inhalt; w.close(); cout << " - " << replaced << " Vorkommnisse ersetzt!" << endl; } } i++; } } cout << endl; system ("PAUSE"); return 0; }
|
-- lol Signatur lol Dieser Post wurde am 23.12.2006 um 15:24 Uhr von weed editiert. |