012
31.10.2005, 09:10 Uhr
~DoppleR
Gast
|
Zunächst ist mir nicht klar, warum du seekg() und seekp() verwendest. Wenn ich das richtig sehe, willst du einfach nur die ganze Datei einlesen. Beim ausführen von datei_l.get(original); bzw. << wird beim nächsten Aufruf automatisch das nächste Zeichen gelesen/geschrieben. seekg() musst du nur verwenden, wenn du nicht am Anfang der Datei beginnen möchtest.
Ich würde es so machen:
C++: |
ifstream datei_l (pfad); //zum Lesen öffnen ofstream datei_s (pfad,ios::in); //zum Schreiben öffnen datei_l.seekg(n); //hier die Anfangsposition einsetzen datei_s.seekp(m); //hier Anfangs-Schreibposition einsetzen if ( datei_l.good()) datei_l.get(original); //erstes Zeichen holen
while ( datei_l.good()) { switch (original) { case 'a' : bild = 'r'; break; case 'b' : bild = '@'; break; case ' ' : bild = '_'; break; } cout << bild;
datei_s << bild; datei_l.get(original); //Zeichen holen } datei_l.close(); datei_s.close();
|
Das letzte Zeichen in der Datei kommt daher, dass das Programm erst in der Schleife erfährt, dass es am Ende der Datei angekommen ist. Dann wird mit get(original) aber keine Änderung an original mehr vorgenommen. Es wird aber trotzdem ausgewertet.
Ich löse das normalerweise so, dass ich als erstes das erste Zeichen lese und in der Schleife die Weiterverarbeitung des Zeichens vor dem Einlesen des nächsten Zeichens kommt (siehe oben). |