Textdatei Komma durch Leerzeichen ersetzen
-
#include <cstdlib> #include <iostream> #include <fstream> int main() { char const *input_filename { "whatever.txt" }; char const *output_filename { "whatever_replaced.txt" }; std::ifstream is{ input_filename }; if (!is.is_open()) { std::cerr << "Couldn't open \"" << input_filename << "\" for reading :(\n\n"; return EXIT_FAILURE; } std::ofstream os{ output_filename }; if (!os.is_open()) { std::cerr << "Couldn't open \"" << output_filename << "\" for writing :(\n\n"; return EXIT_FAILURE; // don't have to close is ... RAII } // copy or replace for (int ch = is.get(); ch != EOF; ch = is.get()) os.put(ch == ',' ? ' ' : ch); }
fertig.
Recherchiere was Streams sind. Algorithmen (
<algorithm>
) machen Dir bloß das Leben leichter.In SeppJ's Schreibweise genau das gleiche, brauchst nur
cin
mitis
undcout
mitos
ersetzen.
-
@bthight sagte in Textdatei Komma durch Leerzeichen ersetzen:
Weil dort sehe ich nachher, dass alle zeilen durchgegangen worden sind.
Nein. Das ist eine Zeile.
@bthight sagte in Textdatei Komma durch Leerzeichen ersetzen:
Ich habe mal das cout außerhalb gelegt, dann bekomme ich exakt eine Zeile ausgegeben.
Wenn
myfile.close();
immer noch innerhalb der while-Schleife steht, ist das kein Wunder.
-
@manni66 sagte in Textdatei Komma durch Leerzeichen ersetzen:
@bthight sagte in Textdatei Komma durch Leerzeichen ersetzen:
Weil dort sehe ich nachher, dass alle zeilen durchgegangen worden sind.
Nein. Das ist eine Zeile.
@bthight sagte in Textdatei Komma durch Leerzeichen ersetzen:
Ich habe mal das cout außerhalb gelegt, dann bekomme ich exakt eine Zeile ausgegeben.
Wenn
myfile.close();
immer noch innerhalb der while-Schleife steht, ist das kein Wunder.Das war die Lösung. Ich wäre alleine nie drauf gekommen. Und die Output Lösung stimmt nun auch!
-
@bthight sagte in Textdatei Komma durch Leerzeichen ersetzen:
Das war die Lösung.
Dann kann ich nur hoffen daß Du
@bthight sagte in Textdatei Komma durch Leerzeichen ersetzen:
Ich werde mir diese Lösung nochmal in mehr Ruhe anschauen müssen, da ich diese Funktionen nie gesehen habe.
ernst meinst, weil genau das für die meisten Fälle die richtigetm Lösung in C++ ist.
-
@bthight sagte in Textdatei Komma durch Leerzeichen ersetzen:
Das war die Lösung. Ich wäre alleine nie drauf gekommen
Beschäftige dich mit dem Debugger. Damit kann man solche Fehler leicht finden.
-
@bthight Davon abgesehen sollte Dir meine Variante davon oben auch einleuchten.
-
@Swordfish sagte in Textdatei Komma durch Leerzeichen ersetzen:
@bthight Davon abgesehen sollte Dir meine Variante davon oben auch einleuchten.
// copy or replace
for (int ch = is.get(); ch != EOF; ch = is.get())
os.put(ch == ',' ? ' ' : ch);Wobei diese Lösung ja wirklich banal ist.
Ich habe riesen schwierigkeiten mit der Syntax.
D.h. was darf ich in die Klammern schreiben.
Aber so sieht es ja sehr plausibel und einfach aus.
-
@bthight
In welche Klammern genau?In denen der
for
Schleife? https://en.cppreference.com/w/cpp/language/for
Oder geht es um die Syntax mit?
:https://en.cppreference.com/w/cpp/language/operator_other
-
@Schlangenmensch sagte in Textdatei Komma durch Leerzeichen ersetzen:
@bthight
In welche Klammern genau?In denen der
for
Schleife? https://en.cppreference.com/w/cpp/language/for
Oder geht es um die Syntax mit?
:https://en.cppreference.com/w/cpp/language/operator_otherZum einen das is.get() kannte ich nicht.
Das os ist anscheinend das Gegenteil von is.Das ? habe ich in diesem Zusammenhang noch nie gesehen.
-
@bthight sagte in Textdatei Komma durch Leerzeichen ersetzen:
@Schlangenmensch sagte in Textdatei Komma durch Leerzeichen ersetzen:
@bthight
In welche Klammern genau?In denen der
for
Schleife? https://en.cppreference.com/w/cpp/language/for
Oder geht es um die Syntax mit?
:https://en.cppreference.com/w/cpp/language/operator_otherZum einen das is.get() kannte ich nicht.
Das os ist anscheinend das Gegenteil von is.Das ? habe ich in diesem Zusammenhang noch nie gesehen.
Man merkt, du verstehst nicht wirklich, was der Code macht. Deine Erklärungsversuche sind jedenfalls daneben. Wie lernst du C++? Deine Fragen hier deuten darauf hin, dass da ernsthaft ein Problem mit deinem Lehrmaterial besteht. Das Fragezeichen, die Bedeutung von
is
undos
hier, und auch beispielsweise die Benutzung von Klassen, Structs und Vectoren in deinen anderen Threads, das alles sollte eigentlich auch für Anfänger überhaupt kein Problem sein. Dir wird wahrscheinlich schlecht vermittelt, wie C++ geht, und das solltest du dringend abstellen. C++ ist zu schwierig und vergibt keine Fehler, als dass man sich mit Halbwissen durchschlagen könnte.
-
@bthight sagte in Textdatei Komma durch Leerzeichen ersetzen:
Zum einen das is.get() kannte ich nicht.
Das os ist anscheinend das Gegenteil von is.Was is und os sind, ist doch in den Zeilen darüber definiert.
Das ? habe ich in diesem Zusammenhang noch nie gesehen.
Der : gehört dazu. Den kannst du überall einsetzen, wo ein Ausdruck stehen kann.