txt dateien um schreiben
-
oh jetzt ist mein programm ganz durcheinander

Aber bin leider kein guter c Progammierer sonder eher für hobby falls ich was brauch deswegen verstehe ich leider nicht alle deine Ansätze.
Momentan klappt bei mir nix mehr und krieg grad keinen zusammenhang mit deiner hilfe, aber mir wurd klar das mit char ein Fehler war, deswegen dank ich dir schonmal.
Mom hab ich mir wieder eine einlesefunktion eingebaut aber komme mit deinem replace all net zurecht.
halt mein jetztiger quellcode:
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;int main ()
{
int i=0;
string alt="Mgm",neu="10"; // Konstanten die man austauschen soll
char zeile[250],datei[250];
cout <<"Dateiname:" << flush; //Auswahlfenster für Dateinahmen
cin.get(datei,250);
ifstream eingabe(datei,ios::in); // Eingabefenster
ofstream ausgabe("c:\lohngehalt2.txt",ios::out); // Ausgabedatei, muss Vorhanden seinif (eingabe.good()) // Datei wird eingelesen
{
eingabe.seekg(0L,ios::end); //Datei wird eingelesen
cout << "datei:" <<datei <<"\t"
<< eingabe.tellg() <<"Bytes" //Zeigt die Dateigröße an
<< endl;
for (int j=0; j<80;j++)
cout << "_";
cout << endl;
eingabe.seekg(0L,ios::beg);
while (!eingabe.eof()) // liest bis zum ende durch
{
eingabe.getline(zeile,250); // Ausgabefenster
cout << setw(2) <<i++
<< ":" << zeile << endl;//replace_all(zeile,alt,neu);
//ausgabe<<zeile<<"\n";
}
}
else
cout <<"Klappt net"
<< endl;
return 0;
}
-
Erstens: statt den xxx.getline(var,größe); solltest du lieber getline(xxx,var); verwenden (und std::string anstelle der char-Arrays), dann brauchst du dich schonmal nicht darum zu kümmern, wie lang deine Eingabezeilen werden können.
(aus dem String kommst du per c_str() wieder an das char-Array, um deine Datei öffnen zu können)Zweitens: Scroll mal auf der Hauptseite des Forums ganz nach unten - dort findest du das Magazin - und da drin einige Artikel zum Thema IO-Streams und Stringverarbeitung (in letzterem steht auch die oben erwähnte replace_all()-Funktion).
Drittens: sfds
-
sorry wegen der syntaxcoloring war mein fehler hätt mich besser informieren sollen.
Ich blick jetzt garnet mehr durch, bin jetzt leicht orientierungslos da ihr mir immer Fachbegriffe bringt und ich leider noch net viel mit anfangen kann

Also momentan bin auf auf gut deutsch platt
-
Hallo
dann lies dir die genannten Magazin-Artikel durch, und arbeite dich erstmal ein. 10 Minuten sind dafür viel zu wenig.
bis bald
akari
-
habs mir mal durchgelesen und die funktion search() und replace mir genauer angeschaut. Glaub die könnten mir viel helfen und würden Arbeit entnehmen. Aber da ich nicht der große C programmiere bin weiß ich nicht wie ich sie in meinen aktuellen quellqode einbauen kann oder soll. könnt ihr vllt tips geben und beispiele geben.
Mein aktueller code schaut so aus:
#include <fstream> #include <iostream> #include <iomanip> using namespace std; int main () { int i=0; string alt="Mgm",neu="10"; // Konstanten die man austauschen soll char zeile[250],datei[250]; cout <<"Dateiname:" << flush; //Auswahlfenster für Dateinahmen cin.get(datei,250); ifstream eingabe(datei,ios::in); // Eingabefenster ofstream ausgabe("c:\lohngehalt2.txt",ios::out); // Ausgabedatei, muss Vorhanden sein if (eingabe.good()) // Datei wird eingelesen { eingabe.seekg(0L,ios::end); //Datei wird eingelesen cout << "datei:" <<datei <<"\t" << eingabe.tellg() <<"Bytes" //Zeigt die Dateigröße an << endl; for (int j=0; j<80;j++) cout << "_"; cout << endl; eingabe.seekg(0L,ios::beg); while (!eingabe.eof()) // liest bis zum ende durch { eingabe.getline(zeile,250); // Ausgabefenster cout << setw(2) <<i++ << ":" << zeile << endl; //replace_all(zeile,alt,neu); //ausgabe<<zeile<<"\n"; } } else cout <<"Klappt net" << endl; return 0; }
-
Ein letztes Mal: Ersetze die die char-Arrays (char ...[...]) durch strings, mit denen kann man auch vernünftig umgehen (gerade für einen Anfänger ist das um einiges leichter als das Hantieren mit blanken Char-Arrays und -Pointern). Und wie du das einbauen kannst, habe ich weiter oben schon vorgeführt.
(PS: Ein Schritt ist getan, beim nächsten Mal bitte auch deine Quelltexte etwas einrücken ;))
-
Wie schon erwähnt wurde, solltest du dir unbedingt mal ein paar Artikel des C++ Magazins näher anschauen. So, und nun endlich ein kleines Beispiel, das dich deinem Vorhaben etwas näher bringen sollte:
#include <fstream> #include <string> void replace_all(std::string &s, const std::string &search, const std::string &replacement) { for(size_t start = s.find(search); start != std::string::npos; start = s.find(search, start)) s.replace(start, search.size(), replacement); } void replace_in_file(const char *inFilename, const char *outFilename, const char *search, const char *replacement) { std::ifstream original(inFilename); std::ofstream replaced(outFilename); std::string line; while(std::getline(original, line)) { replace_all(line, search, replacement); replaced << line << "\n"; } replaced.close(); original.close(); } int main() { replace_in_file("lohngehalt1.txt", "lohngehalt2.txt", "Mgm", "10"); }
-
Danke nochmal für eure Geduld

Nun hab ich die chars durch String ersetzt und probiert mit std::strings aber dies klappt leider nicht

zeig dir mal den aktuellen quellcode vllt findet ihr ja einen Fehler denn ich übersehen hab:
#include <fstream> #include <iostream> #include <iomanip> using namespace std; int main () { int i=0; string alt="Mgm",neu="10",zeile; // Konstanten die man austauschen soll string datei[250]; cout <<"Dateiname:" << flush; //Auswahlfenster für Dateinahmen ifstream eingabe(datei,std::iostream); // Eingabefenster ofstream ausgabe("c:\lohngehalt2.txt",ios::out); // Ausgabedatei, muss Vorhanden sein if (eingabe.good()) // Datei wird eingelesen { eingabe.seekg(0L,ios::end); //Datei wird eingelesen cout << "datei:" <<datei <<"\t" << eingabe.tellg() <<"Bytes" //Zeigt die Dateigröße an << endl; for (int j=0; j<80;j++) cout << "_"; cout << endl; eingabe.seekg(0L,ios::beg); while (!eingabe.eof()) // liest bis zum ende durch { while(getline(eingabe,zeile)) { replace_all(zeile,alt,neu); ausgabe<<zeile<<"\n"; } } cout <<"Klappt net" << endl; return 0; } }
-
Vielleicht solltest du doch mal meine Artikel durchlesen - und dann NACHDENKEN, was du da eigentlich machst? (du brauchst je einen einzelnen String für Dateiname, etc, kein Array von Strings)
(btw, für std::string verwendet man nicht die Memberfunktion getline(), sondern die gleichnamige globale Funktion)
PS: Und normalerweise liefert ein Compiler auch vernünftige Fehlermeldungen, wenn ihm etwas nicht gefällt.
-
sorry cstoll das ich dann deien Zeit verschwendet hab, ich hab doch gesagt ich bin kein super programmierer und habe nicht viel ahnung, ich kann halt nur nach beispielen programmieren die mein Problem verdeutlichen und nicht nach eingen schlagwörtern, die sage nmir einfach nix.
@ Konstruktör: Danke du ahst mir echt geholfen und hast mir gezeigt wo meien Fehler waren oder sagen wir mal das ich alles falsch hatte und zu sehr auf meinem alten aufgebaut hab. Vielen Dank nochmal!!