*VOR* einem bestimmten keyword immer einen zeilenumbruch machen
-
Hallo alle zusammen,
habe gleich mal noch eine Frage wo ihr mir vielleicht weiterhelfen könntet...
Und zwar geht kopiere ich eine Datei und er kopiert mir genau das was ich möchte...Nun möchte ich die Formatierung des textes etwas anpassen.
Ich möchte dass vor jedem Keyword ein Zeilenumbruch gemacht wird...
also statt
Hello World
*Keyword* 123
fasdf asdf
*Keyword* 124
asdf asfd
asdf fgasdf
*Keyword* 125
fsadf jljlsoll es wie folgt formatiert sein
Hello World
*Keyword* 123
fasdf asdf*Keyword* 124
asdf asfd
asdf fgasdf*Keyword* 125
fsadf jljlEs soll halt "vor" jedem *Keyword* einen Zeilenumbruch machen...
Ich kriege das nicht so richtig gebacken würde mich über eure hilfe freuen!
...Das ist mein zusammengeschnipselte code:
//Erstelle Kopie von asc datei mit dem typ lst std::ifstream read(directory1); std::ofstream write( "kopiemitKeyword.lst" ); std::string line; while (std::getline( read, line ) && line!="*NET*"); write <<"*ARIADNE*"<<std::endl<<std::endl; write <<"*NET*"<<std::endl<<std::endl; while ( !read.eof() ) { std::getline(read, line); write << line<<std::endl; } write.close(); read.close();
-
Schau einfach, ob die line, die du einliest gerade das Keyword ist und dann mach bevor du es kopierst einfach ein '\n' rein..
-
Ersetze jedes Keyword mit \nKeyword.
Schau dir einfach replace, find, find_first_of, etc. an.
-
ok ich habe es so nun, aber dennoch setzt es mir keine leerzeichen rein?
Woran liegts denn nun...//Erstelle Kopie von asc datei mit dem typ lst std::ifstream read(directory1); std::ofstream write( "kopiemitKeyword.lst" ); std::string line; while (std::getline( read, line ) && line!="*NET*"); write <<"*ARIADNE*"<<std::endl<<std::endl; write <<"*NET*"<<std::endl<<std::endl; while ( !read.eof() ) { std::getline(read, line); if(line =="*SIGNAL*"){ write <<' \n'<<std::endl; write << line<<std::endl; } else write << line<<std::endl; } write.close(); read.close();Es muss doch normaler weise gucke ob in line das signal vorkommt wenn ja muss es mir doch ein leerzeile reinsetzen ? bzw. zeilenumbruch leider kommt da nix irgendwie... Ich glaube ich bin betriebsblind

-
Zeig bitte mal, was genau in dem File steht.. Weil du natürlich nicht eine ganze Zeile mit einem string vergleichen kannst und dann davon ausgehen, dass er dir nur das erste Wort nimmt. Dafür gibt es den >>-Operator..
-
lass doch einfach sed drüberlaufen oder was in der Art, dazu musst du nichtmal unbedingt C++ bemühen
sed 's/(KEYWORD)/\n$1/' originalfile > copyfile
-
in dem File steht
*NET*
*SIGNAL* esd
asdf sdf
*SIGNAL* fadsf
asfd fdsa
*SIGNAL* fdsx
asdf asdfes sieht halt genau so aus... Und es soll halt immer wenn das *SIGNAL* kommt eine Zeile drüber gehen und dann eine Zeile Frei lassen !
ALSO SO:
*NET**SIGNAL* esd
asdf sdf*SIGNAL* fadsf
asfd fdsa*SIGNAL* fdsx
asdf asdfOder soll ich statt zeile für zeile einlesen zeichen für zeichen einlesen, aberdas ist doch wiederrum langsamer
ich könnte kotzen 
-
std::ifstream in("file.txt"); std::ofstream out ("outfile.txt"); std::string word = ""; while ( in >> word ) { if ( word == "was auch immer" ) out << '\n'; out << word; }So in etwa sollte das gehen..
-
drakon schrieb:
...So in etwa sollte das gehen..
Mal abgesehen davon dass alle bereits vorhandenen whitespaces (tabs, newlines etc) wegfallen. Output wäre also etwa
*NET* *SIGNAL*esdasdfsdf *SIGNAL*fadsfasfdfdsa *SIGNAL*fdsxasdfasdf
-
pumuckl schrieb:
...
Ich habe gesagt so in etwa..

Man kann da jetzt das mit den Umbrüchen selbst noch reinbasteln, oder sich die Zeile holen und dann einfach die Keywords ersetzen. (Mit dem newline am Anfang).
-
Ok... Ich wärde die so in etwa Variante mal morgen ausprobieren!
Wie würde es denn so aussehen
std::ifstream in("file.txt");
std::ofstream out ("outfile.txt");std::string word = "";
while ( in >> word )
{
if ( word == "*SIGNAL*" ){
out <<std::endl<<std::endl;
out << word<<std::endl;
}
else
out<<word<<std::endl;
}Würde das nicht Funktionieren erliest einfach die Zeile ein Wenn es mit Signal beginnt fügt es als erstes eine leere Zeile... Falls nicht schreibt es das Wort als erstes hin ...
Vielen Dank nochmals...........
-
Da wird nur bis zum ersten Whitespace gelesen. (Normalerweise also einfach ein Wort).