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:
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?
mfg
Edit: Konnte es selber lösen, wobei mir hiers Board geholfen hat:
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.
C++:
#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:
C++:
while( getline(iStream, aktuelleZeile) )
mfg
Edit: Konnte es selber lösen, wobei mir hiers Board geholfen hat:
C++:
#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.
Zuletzt bearbeitet von einem Moderator: