ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
4407
4407
EMPFEHLEN
-
Hi, bin nach dem ich mal fleissig Tutorials durchgearbeitet hab, jetzt dabei nen kleines Programm zu schreiben, das den Text einer Datei einliest, bestimmte Zeichen dann umwandelt und anschliesend wieder einliest. Hab auch schon diverse Threads hier durchgelesen, die mir auch soweit geholfen haben, aber jetzt habe ich trotzdem 2 Fragen. Hier erstmal der aktuelle Code:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#include <string> #include <fstream> #include <iostream> using namespace std; void konvertieren(char dateiName[30]) { // Datei öffnen ifstream iStream(dateiName); ofstream oStream(dateiName); cout << "iStream: " << iStream << " oStream: " << oStream << endl; // Kontrolle string aktuelleZeile; while( getline(iStream, aktuelleZeile) ) { cout << "aktuelleZeile (Anfang von Schleife): " << aktuelleZeile << endl; // Kontrolle while(aktuelleZeile.find("<",0)<300) aktuelleZeile.replace(aktuelleZeile.find("<",0),4,"<"); cout << "aktuelleZeile (Ende von Schleife): " << aktuelleZeile << endl; // Kontrolle cout << "iStream (Schleife): " << iStream << " oStream (Schleife): " << oStream << endl; // Kontrolle oStream << aktuelleZeile << endl; } iStream.close(); oStream.close(); } void main() { konvertieren("test.txt"); }
Leider funktioniert das nur wenn ich für oStream eine zweite Textdatei nehme, mit der gleichen ist es nicht möglich. Das wäre mal meine erste Frage wie man das mit den gegebenen Mitteln machen kann oder ob ich da nen ganz anderen ansatz benötige (wenn ja, nur die richtung angeben, den weg will ich selber suchen).
Zweite Frage wäre wie arbeitet die Zeile:
Was gibt getline denn zurück und verstehe ich das richtig, in dieser while abfrage wird auch die Variable aktuelleZeile gefüllt?Code cpp:1
while( getline(iStream, aktuelleZeile) )
mfg
Edit: Konnte es selber lösen, wobei mir hiers Board geholfen hat:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
#include <string> #include <fstream> #include <iostream> using namespace std; void konvertieren(char dateiName[30]) { ifstream iStream(dateiName); // Datei öffnen ofstream tempStream("temp.txt"); // tempomäre Datei erstellen und öffnen string aktuelleZeile; while( getline(iStream, aktuelleZeile) ) // ?, vermutlich die Zeile in string laden und wiederholen bis zum ende der Datei { while(aktuelleZeile.find("<",0)<300) aktuelleZeile.replace(aktuelleZeile.find("<",0),4,"<"); // wiederholen bis Ende von Zeile ("find" gibt dann riesige Zahl aus) und suchzeichen ersetzen. while(aktuelleZeile.find(""",0)<300) aktuelleZeile.replace(aktuelleZeile.find(""",0),6,"\""); // wiederholen bis Ende von Zeile ("find" gibt dann riesige Zahl aus) und suchzeichen ersetzen. while(aktuelleZeile.find(">",0)<300) aktuelleZeile.replace(aktuelleZeile.find(">",0),4,">"); // wiederholen bis Ende von Zeile ("find" gibt dann riesige Zahl aus) und suchzeichen ersetzen. while(aktuelleZeile.find("&",0)<300) aktuelleZeile.replace(aktuelleZeile.find("&",0),5,"&"); // wiederholen bis Ende von Zeile ("find" gibt dann riesige Zahl aus) und suchzeichen ersetzen. tempStream << aktuelleZeile << endl; // in tempomäre Datei schreiben } iStream.close(); tempStream.close(); remove(dateiName); // Original Datei löschen rename("temp.txt", dateiName); // tempomäre Datei umbenennen } void main() { konvertieren("test.txt"); }
Ich lass erst in eine tempomäre Datei schreiben, lösche das original und benenne die Temp um.
Wenn mir jedoch jemand die Frage zur while-Bedingung beantworten würde, wäre mir trotzdem für die Zukunft geholfen.Geändert von shakar (12.08.07 um 21:49 Uhr)
-
13.08.07 09:27 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Laut C++ Standard (und auch C Standard) muss die main Funktion int zurückgeben.
Dann liefert die std::string::find Methode tatsächlich eine große Zahl wenn der gesuchte Substring nicht gefunden wurde, aber nicht irgendeine sondern std::string::npos. Du solltest besser auf Gleichheit mit diesem Wert prüfen - schließlich kann es auch sein, dass die Zeile größer als 300 Zeichen ist. Siehe z.B. http://www.cplusplus.com/reference/s...ring/find.html
Die Funktion getline liefert das Input-Stream Objekt zurück welches als erster Parameter übergeben wurde. Die eingelesene Zeile wird tatsächlich in dem String der als zweiter Parameter übergeben wird gespeichert - jedenfalls wenn kein Fehler auftritt. Dann wird nämlich nur der Fehlerzustand im Stream verändert. Siehe http://www.cplusplus.com/reference/string/getline.html
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Das mit den 300 Zeichen ist zum glück tatsächlich das maximale Limit das bei meinen Dateien auftauchen kann, aber danke für den Hinweis dann weiss ich bescheid für zukünftige Programme. Bei void main() bin ich wohl von Volkardskurs vorgeschädigt, fiel mir aber auch schon auf das das nirgends sonst erscheint, werde ich auch in Zukunft beachten.
Ähnliche Themen
-
Datei einlesen - uebermitteln - und wieder abspeichern
Von zu1u im Forum JavaAntworten: 1Letzter Beitrag: 22.01.09, 07:33 -
Text-Datei auslesen & text anfügen (mal wieder)
Von Nico192 im Forum Visual Basic 6.0Antworten: 6Letzter Beitrag: 22.10.05, 20:10 -
XML Datei in Flash einlesen und wieder speichern
Von Orphelina im Forum Flash PlattformAntworten: 38Letzter Beitrag: 29.06.05, 15:33 -
Gespeicherte Datei wieder einlesen
Von Bastih84 im Forum C/C++Antworten: 5Letzter Beitrag: 09.05.05, 13:07 -
Formular auslesen in Cookie, bei erneutem Aufrufen wieder einlesen
Von davaeth im Forum PHPAntworten: 2Letzter Beitrag: 06.11.03, 11:17





Zitieren
Login






