Ofstream - Kleines Prob!?
-
Wie evlt. einige gesehen haben versuche ich ein kleines Programm zu schreiben um eine txt datei zu formatieren .. naja ich dachte mir "back to the roots und alles von unten an noch ma durch kauen" ..
so ich hab jetzt eine simple txt datei mit 2 "absätzen".
1. Abs " Hallo "
2. Abs " Hallo du! "--------------------
die 2te datei soll so aussehen:
1. Abs " hello "
2. Abs " hello you! "--------------------
Aber das hello you wird nicht komplett übertragen sondern nur das hello vom anfang des satzes!!! :// und auch direkt an das erste hello dran.
#include <cstdlib> #include <iostream> #include <fstream> #include <string> using namespace std; int main(int argc, char *argv[]) { char fileName[80]; char buffer[255]; char newFileName[80]; cout << "Dateiname: "; // Eingabe Welche Datei gelesen werden soll cin >> fileName; // Variable für den Dateiname cout << "Neuer Dateiname: "; cin >> newFileName; ifstream fin(fileName); ofstream fout(newFileName); string zeile; while(getline(fin, zeile)) //zeilenweise einlesen { if(zeile.find("Hallo",0)!=string::npos) { fout << "hello"; } else if(zeile.find("Hallo du!",0) !=string::npos) { fout << "hello you!"; } } system("PAUSE"); return EXIT_SUCCESS; }
-
Erstens: In der zweiten Zeile kommt auch das Wort "Hallo" vor, also greift dort das obere if() - eventuell solltest du die beiden if()'s vertauschen.
Zweitens: die Streams setzen dir nur einen Zeilenwechsel ein, wenn du sie darum bittest - dazu kannst du entweder ein '\n' oder endl an den operator<<() übergeben.
-
kk - dachte geht evlt. auch anders ^^!
hm, ich weiss das man zeilenweiße auslesen kann aber das funzt irgendwie net? wie geht das
-
wie gesagt, du mußt deinem Programm sagen, wo die Zeilenwechsel hinkommen:
fout<<"Hallo\n"; // \n = ENTERfout<<"Hallo"<<endl; // endl = "End Line" = Zeilenwechsel
-
ne ich mein, das program muss ja die vorhandene TEXT1 datei einlesen um dann die if fragen durchlaufen zu lassen, und da kann man doch irgendwie zeilenweiße die bedingungen durchlaufen lassen oder nisch?
-
Worauf willst du denn hinaus? bei deiner "if()...else if()..." Konstruktion wird in jedem Schleifendurchlauf die erste Bedinungung genommen, die wahr ergibt. Deshalb sagte ich ja, du solltest die Bedingungen vertauschen:
if(zeile.find("Hallo du!")!=string::npos) fout << "hello you!\n"; else if(zeile.find("Hallo")!=string::npos) fout << "hello";(btw könntest du auch auf == vergleichen)
-
hm jo ich habs getestet, aber dann geht irgendwie garnichts mehr?
edit etz gehts ^^
hab ma den CODEBLOCKS IDE verwendet .. arbeite normal mit dev c++! Soll ich bei codeblocks bleiben?
-
Andere Frage!
Ich hab ja ne Ifabfarge nach z.B. dem Wort HUND .. wenn in der datei hundeundkatzen.dat das wort HUND vorkommt woll es durch KATZE ersetzt werden! wie geht das?
Einlesen von hundeundkatzen.dat
hunde durch katzen im text ersetzen!Ausgeben von hundeundkatzen2.dat
all right :)!
-
Mein Code:
#include <cstdlib> #include <iostream> #include <fstream> #include <string> using namespace std; int main(int argc, char *argv[]) { char fileName[80]; char buffer[255]; char newFileName[80]; cout << "Dateiname: "; // Eingabe Welche Datei gelesen werden soll cin >> fileName; // Variable für den Dateiname cout << "Neuer Dateiname: "; cin >> newFileName; ifstream fin(fileName); ofstream fout(newFileName); string zeile; while(getline(fin, zeile)) //zeilenweise einlesen { int sp_pos=zeile.find(' '); string nummer=zeile.substr(0,sp_pos);//erster Abschnitt zeile.erase(3,sp_pos+1); //Restzeile if(zeile.find("Hallo du!",0)!=string::npos) { fout << "hello you!\n"; } else if(zeile.find("Hallo",0)!=string::npos) { fout << "hello" << endl; } else if(zeile.find("(compatible; MSIE 6.0; Windows NT 5.1; SV1; I Wish This Were Firefox.; .NET CLR 1.1.4322)",0)!=string::npos) { fout << "Wish This Were FireFox"; } } system("PAUSE"); return EXIT_SUCCESS; }Gestern hat er noch wörter usw. ersetzt aber als ich dann irgendwie ich glaube es war bei der 3 IF abfrage .. als die diese einfügte ging irgendwie nix mehr die ausgegebene Datei is ständig leer :/!
und eig. sollen alle daten in die ausgegebene datei übernommen. Nur halt auch ausgetauscht oO
-
Eventuell solltest du hinter dem letzten if()-Block noch ein "else fout<<zeile<<endl;" anhängen, damit er nicht erkannte Zeilen unverändert übernimmt.
-
ui danke :)! etz is da irgendwie nur nen prob! :| die ausgabe sieht jetzt so aus:
12渱搀漀眀猀㬀 唀㬀 圀椀渀搀漀眀猀 一吀 㔀⸀㬀 攀渀ⴀ唀匀㬀 爀瘀㨀⸀㜀⸀㔀⤀ 䜀攀挀欀漀⼀㈀ 㐀 㜀 䘀椀爀攀昀漀砀⼀⸀ ∀ഀഀ 228mpatible; MSIE 6.0; Windows NT 5.1; SV1; I Wish This Were Firefox.; .NET CLR 1.1.4322)" ㈀㠀㠀洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀㬀 匀嘀㬀 䤀 圀椀猀栀 吀栀椀猀 圀攀爀攀 䘀椀爀攀昀漀砀⸀㬀 ⸀一䔀吀 䌀䰀刀 ⸀⸀㐀㌀㈀㈀⤀∀ഀഀ 355mpatible; MSIE 6.0; Windows NT 5.0)" 㤀 洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀㬀 匀嘀⤀∀ഀഀ 135mpatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" 㐀㤀 洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀⤀∀ഀഀ 150mpatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" ㈀㌀㔀洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀㬀 ⸀一䔀吀 䌀䰀刀 ⸀⸀㐀㌀㈀㈀⤀∀ഀഀ 220mpatible; MSIE 6.0; Windows NT 5.1; SV1)" ㈀㈀㜀洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀㬀 匀嘀㬀 䤀 圀椀猀栀 吀栀椀猀 圀攀爀攀 䘀椀爀攀昀漀砀⸀㬀 ⸀一䔀吀 䌀䰀刀 ⸀⸀㐀㌀㈀㈀⤀∀ഀഀ 465mpatible; MSIE 6.0; Windows NT 5.1)" ㌀㠀㤀洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀㬀 匀嘀⤀∀ഀഀ 277mpatible; MSIE 6.0; Windows NT 5.1; SV1; I Wish This Were Firefox.; .NET CLR 1.1.4322)" 㐀㈀洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀ 㬀 ⸀一䔀吀 䌀䰀刀 ⸀⸀㐀㌀㈀㈀⤀∀ഀഀ 492mpatible; MSIE 6.0; Windows NT 5.1; SV1)" ㌀㈀洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀㬀 ⸀一䔀吀 䌀䰀刀 ⸀⸀㐀㌀㈀㈀⤀∀ഀഀ 510mpatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)" ㈀㤀㈀洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀㬀 匀嘀㬀 䤀 圀椀猀栀 吀栀椀猀 圀攀爀攀 䘀椀爀攀昀漀砀⸀㬀 ⸀一䔀吀 䌀䰀刀 ⸀⸀㐀㌀㈀㈀⤀∀ഀഀ 269mpatible; MSIE 6.0; Windows NT 5.1; SV1; I Wish This Were Firefox.; .NET CLR 1.1.4322)" 㐀㠀洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀⤀∀ഀഀ 172mpatible; MSIE 6.0; Windows NT 5.1; SV1)" ㈀㔀㜀洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀㬀 匀嘀㬀 䤀 圀椀猀栀 吀栀椀猀 圀攀爀攀 䘀椀爀攀昀漀砀⸀㬀 ⸀一䔀吀 䌀䰀刀 ⸀⸀㐀㌀㈀㈀⤀∀ഀഀ 548mpatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)" 㐀㐀洀瀀愀琀椀戀氀攀㬀 䴀匀䤀䔀 㘀⸀ 㬀 圀椀渀搀漀眀猀 一吀 㔀⸀㬀 匀嘀⤀∀ഀഀnur das die ganzen zahlen usw. chinesishe zeichen bzw. so kontainer ergeben
-
#include <cstdlib> #include <iostream> #include <fstream> #include <string> using namespace std; int main(int argc, char *argv[]) { char fileName[80]; char buffer[255]; char newFileName[80]; cout << "Dateiname: "; // Eingabe Welche Datei gelesen werden soll cin >> fileName; // Variable für den Dateiname cout << "Neuer Dateiname: "; cin >> newFileName; ifstream fin(fileName); ofstream fout(newFileName); string zeile; while(getline(fin, zeile)) //zeilenweise einlesen { int sp_pos=zeile.find(' '); string nummer=zeile.substr(0,sp_pos); //erster Abschnitt zeile.erase(0,sp_pos++); //Restzeile if(zeile.find("Hallo du!",0)!=string::npos) { fout << "hello you!\n"; } else if(zeile.find("Hallo",0)!=string::npos) { fout << "hello\n" << endl; } else if(zeile.find("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5)",0)!=string::npos) { fout << nummer << " " << zeile << endl; } else fout << zeile << endl; } system("PAUSE"); return EXIT_SUCCESS; }brauch schon wieder hilfe :{
Ich hab da jetzt nen prob... mal wieder -.-!
Ich hab es bis vor kurzem hinbekommen die Datei halbwegs so auszuschreiben wies gewollt ist...
NUMMER - NEUE ZEIELE
NUMMER - ALTE ZEILE WENN KEINE ABFRAGE... jetzt hab ich weiter probiert und nun gehts schon wieder nicht MAN! ich flipp aus :/!
-
keinen nen tipp? Was ich da falsch mache oda so

-
Wenn du die Nummer haben willst, mußt du sie auch ausgeben
(ein fout<<nummer<<" - "; vor dem Beginn der if()-Abfragen dürfte da reichen)
-
hae wie(so) vor der if abfrage

-
Wenn du es nach den if-Blöcken schreibst, landet die Zeilennummer an der falschen Stelle in der Ausgabedatei

alternativ kannst du auch die Ausgabe in jedem if-Block ergänzen:
if(bed1) [b]fout<<nummer<<" - "[/b]<<ersatz1; else if(bed2) [b]fout<<nummer<<" - "[/b]<<ersatz2; else if... ... else [b]fout<<nummer<<" - "[/b]<<zeile;
-
so hab ich das doch :)!
aber.. ich lesee DATEI1 ein ins programm
'NUMMER' > 'BROWSERTYP BEZEICHNUNG'
-------------------------
dann werden die if fragen durchgeklappert ... normaler weiße müsse es so ausehen
== 'NUMMER' > 'KURZE BROWSERBESCHREIBUNG' ==
--- sieht aber so aus ---
'BROWSERTYP' 'BEZEICHNUNG'

EDIT;// Ich zeig nochma den Aktuellen Code:
( Die erste IF frage: Da hab ich was getestet klappt aber auch nicht.. und die 2te if abfrage ist so wie ichs von anfang an hatte)
#include <cstdlib> #include <iostream> #include <fstream> #include <string> using namespace std; int main(int argc, char *argv[]) { char fileName[80]; char buffer[255]; char newFileName[80]; cout << "Dateiname: "; // Eingabe Welche Datei gelesen werden soll cin >> fileName; // Variable für den Dateiname cout << "Neuer Dateiname: "; cin >> newFileName; ifstream fin(fileName); ofstream fout(newFileName); string zeile; while(getline(fin, zeile)) //zeilenweise einlesen { string::size_type sp_pos = zeile.find(' '); string nummer = zeile.substr(0,sp_pos); //erster Abschnitt zeile.erase(0,sp_pos++); //Restzeile if(zeile.find("(compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",0)!=string::npos) { string FireFox17("Fire Fox 1.0.7"); zeile.replace(sp_pos,FireFox17.length(),FireFox17); fout << nummer << ' ' << zeile << endl; } else if(zeile.find("Mozilla/4.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5)",0)!=string::npos) { zeile = "hallo3"; fout << nummer << ' ' << zeile << endl; } else fout << zeile << endl; } system("PAUSE"); return EXIT_SUCCESS; }
-
Kann keiner helfen? Ich verzweifel echt
!!
-
Ich frag nochma :/!
Kann mir hier keiner sagen wie ich eine Textzeile in einer Text datei lesen und ersetzen kann
z.B
Der hund und die Katze!
in
Hund und Katze!
-
Da eine Textdatei variable Satzlängen (zu Deutsch "Textzeilen") enthält ist der einzig praktikable Weg das Schreiben einer neuen Textdatei mit den geänderten Zeilen...
-
na soweit sind wir doch schon längst
les dir ma meinen code duch und schau was ich falsch mache! Eig. sollte es so gehen aber tuts irgendwie net