Problem mit einlesen und Ausgeben einer Textdatei!!
-
Hallo
der Quellcode mit dem ich das Problem habe sieht wie folgt aus:
if (WahlVerschluesselung==1) { cout << "Textdatei wird ausgeben" << endl; ifstream datei("C:\\Normaler_Text.txt"); if (!datei.is_open()) cout << "Datei existiert nicht." << endl; else { char inhalt[121000]; string inhalt2; while (!datei.eof()) { datei.getline(inhalt,120999); inhalt2 += inhalt; cout<<inhalt<<endl; } //cout << inhalt2 << endl; ofstream out("C:\\Verschlusselt.txt"); out << inhalt2; cout<<"Der Text:"<<endl; cout<<inhalt2<<endl; } }
Das Problem welches ich habe ist folgendes:
Angenommen ich habe einen Text in der Textdatei mit Absätzen neuzeilen usw. dann ließt er den kommletten Text ein aber er übernimmt nicht die Formatierung. Sprich die Absätze, Enter und Leerzeilen gehen verloren. Lass ich den Text innerhalb folgender Schleife ausgeben:
while (!datei.eof()) { datei.getline(inhalt,120999); inhalt2 += inhalt; cout<<inhalt<<endl; }
dann ist es so das die Formatierunegn usw. vorhanden sind außerhalb der Schleife aber nicht mehr! Ich benötige den Text mit richtiger Formatierung außerhalb der Klammer und nach einer weiteren verarbeitung soll dieser auch wieder in eine Datei geschrieben werden, aber wichtig mit formatierung!
Warum funktioniert das nicht und was muss ich machen damit das funktioniert??
Ich bin für jede Hilfe dankbar!
Mfg
-
getline() übergibt die \n nicht mit an den Ausgabestring. Das heißt, wenn du sie benötigst, mußt du sie selber wieder anhängen:
string inhalt, zeile; while(datei)//fängt mehr Fehlermöglichkeiten ab als while(!datei.eof()) { getline(datei,zeile);//die globale Version von getline kümmert sich selbst um die Zeilenlänge ;) inhalt += zeile + '\n'; /*Testausgabe:*/cout<<zeile; }
(innerhalb der Schleife hatte das '<<endl' dafür gesorgt, daß die Texte korrekt formatiert wurden ;))
Edit: Was hat die Frage eigentlich mit CLI zu tun?
-
Hallo also das funktioniert damit auch nicht, es ist nur schlimmer geworden aus folgendem Text:
assssssssssssssssssssssssssssssssssssss
f
g
dgtdf
ztr
fdg
fg
fg
dg
reztg
fdtge
rdg
drg
rt
dgdhgdftzhdtrgzr
rdgdgrergd
Hallo alles nix!
ist dieser geworden:::
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrgzrrgzrrgzrrgzrrgzrrgzrs nix!Der Quellcode dazu sieht jetzt so aus:
char inhalt[121000]; string inhalt2; while (!datei.eof()) { datei.getline(inhalt,120999); inhalt2 += inhalt + '\n'; cout<<inhalt2<<endl<<endl; // if(inhalt2==13) // cout<< <<endl; }
Ob ich das nun in der klammer ausgeben lasse oder außerhalb ist aber gleich
woran liegt das und wie funktioniert das richtig?
Was meinst du mit CLI?
Mfg
-
Das liest daran, daß du immer noch mit char-Arrays hantierst. Ersetze das 'char inhalt[12100];' mal durch 'string inhalt;' und 'datei.getline(inhalt,12099);' durch 'getline(datei,inhalt)', dann sollte es eigentlich besser aussehen. char-Arrays waren in der C-Welt zwear durchaus nützlich (und sind auch heute noch gelegentlich sinnvoll), aber für dich ist std::string deutlich einfacher zu handhaben.
(und insbesondere: hinter
inhalt+'\n'
steckt bei deinem char-Array eine Zeiger-Addition, bei einem std::string eine Konkatenation)Was meinst du mit CLI?
Daß du dich ins falsche Board verirrt hast
(hier geht es um C++/CLI, eine Mischung aus klassischem C++ und dem .NET-Framework - das C++ Board ist etwas weiter unten)
-
Danke Danke Danke vielmals es funktioniert jetzt einwandfrei ich bin dir wirklich sehr sehr dankbar falls sich noch etwas ergeben sollte melde ich mich nochmal danke danke wirklich sau stark danke!!
LG