Textfile auslesen
-
@marsmännchen sagte in Textfile auslesen:
Und verstehe ich das richtig? Ich brauche das myfile.open nicht weil:
"File streams are associated with files either on construction, or by calling member open."Genau. Also das bedeutet:
// ENTWEDER (1) std::ifstream myfile("datei"); // myfile öffnet "datei" bereits hier // ODER (2) std::ifstream myfile; // jetzt ist myfile noch keiner Datei zugeordnet myfile.open("datei"); // erst jetzt wird geöffnet
(1) ist das idiomatischere C++. Also gleich eine Datei zuordnen. Nicht erst ein leeres Dummy-Objekt erstellen, bei dem man eigentlich nichts sinnvolles machen kann außer eine Datei zu öffnen.
Deine Funktion hat generell das Problem, dass sie nur eine Zeile zurückgibt. Was soll denn deine Funktion "dataout" zurückgeben? Die ganze Datei oder eine Zeile oder noch was anderes? Was möchtest du erreichen? Vom Namen "dataout" lässt sich das nicht schließen. Also noch ein Tipp: benenne deine Funktion so, dass klar ist, was sie tut. "dataout" könnte alles mögliche tun.
-
Danke für die Erklärung.
Soll eigentlich die ganze Datei ausgeben, aber soweit bin ich noch nicht.
Ist nur zum üben für mich.
Will dann später mit Qt eine GUI erstellen wo ich eine Suchfunktion für die Datei mache.
Ist halt nur rein zwecks Übung, weil alle anderen Übungsaufgaben beschäftigen sich hauptsächlich mit irgendwelchen Zahlen zur Berechnung.
Sowas brauch ich eigentlich nicht wirklich.
Daher hab ich mir eigene "Übungen" überlegt, sowas wie die Suchfunktion eben.MfG
-
@marsmännchen sagte in Textfile auslesen:
Ich möchte eine Textdatei anzeigen lassen.
#include <fstream> #include <iostream> int main() { std::cout << std::fstream{ "home/testtext" }.rdbuf() << '\n'; }
und nu?
@marsmännchen sagte in Textfile auslesen:
Will dann später mit Qt eine GUI erstellen wo ich eine Suchfunktion für die Datei mache.
Du bitte lassen Finger von Qt wenn nix können Grundlagen. Danke.
-
Deshalb ich auch anfangen zu lernen Grundlagen.Du verstehen?
-
Du darfst gewisse Wörter wie "Grundlagen" und "Qt" oder "Spiel" nicht in einer Antwort zusammen schreiben. Das sind Schlüsselwörter, wo manche User direkt das Hirn ausschalten und in den Angriffsmodus gehen.
-
@Jockelx ja das gibt's immer wieder mal. Wobei ich mir doch denke, auf Angriff schalte ich wenn ich mich bedroht fühle. Wo liegt da die Bedrohung? Aber gottseidank gibt es immer noch normale Leute im forum die gerne mal einem Anfänger helfen.
-
@marsmännchen sagte in Textfile auslesen:
Deshalb ich auch anfangen zu lernen Grundlagen.Du verstehen?
-
@marsmännchen sagte in Textfile auslesen:
@Jockelx Aber gottseidank gibt es immer noch normale Leute im forum die gerne mal einem Anfänger helfen.
Naja wer ist schon normal. @Swordfish ist aber auf jeden Fall ein eher hilfreicher Zeitgenosse. Hat halt manchmal seine Momente, so wie wir alle.
-
@hustbaer Wenn @marsmännchen sich hinsetzen und lernen ordentlich ich nichts gesagt haben will.
. o O ( erschlagt meinen Deutschlehrer eben wenn ihr ihn seht )
. o O ( wenn ich was Positives an der originalen Fragen finden sollte ... es ist wenigstens kein!myfile.eof()
drinnen )
-
@Swordfish Tut mir leid das Thema in die länge zu ziehen, aber da drängt sich mir natürlich die Frage auf was an
!myfile.eof() so schlecht ist? Man sieht es in sehr vielen Beispielen in Verwendung.
-
@marsmännchen sagte in Textfile auslesen:
@Swordfish Tut mir leid das Thema in die länge zu ziehen, aber da drängt sich mir natürlich die Frage auf was an
!myfile.eof() so schlecht ist? Man sieht es in sehr vielen Beispielen in Verwendung.Es wird fast immer falsch benutzt. Wo siehst du es "in sehr vielen Beispielen in Verwendung"? Alle Beispiele der Art
while (!myfile.eof()) { ... }
sind schlecht. Das Eofbit wird erst gesetzt, nachdem versucht wurde, über das Dateiende hinaus zu lesen.
-
@wob wo in welchen Beispielen? z.b:
https://mathbits.com/MathBits/CompSci/Files/End.htm
http://www.cplusplus.com/reference/ios/ios/eof/
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.bpxbd00/feof.htm
http://www.willemer.de/informatik/cpp/fileop.htmDaher ist es natürlich für mich interessant zu hören das man das nicht tun sollte.
Aber egal, ich will mit solchen Details eure Geduld nicht zu sehr strapazieren. Sowas kann ich auch sicher irgendwo spezifisch lesen wie man EOF genau verwendet.
Danke jedenfalls für die Hilfe!
-
Kann man mit
!eof
als Laufbedingung nicht auch wunderschön endlos loopen?
-
@hustbaer ja, das geht damit ganz toll
@marsmännchen sagte in Textfile auslesen:
da drängt sich mir natürlich die Frage auf was an
!myfile.eof() so schlecht ist? Man sieht es in sehr vielen Beispielen in Verwendung.Da hast du genug Lesestoff: Why is iostream::eof inside a loop condition considered wrong?
-
@marsmännchen Bitte eof() von std Streams nicht mit feof() verwechseln. Heisst zwar ähnlich, tut aber nicht ganz gleich.
-
@marsmännchen sagte in Textfile auslesen:
@wob wo in welchen Beispielen? z.b:
https://mathbits.com/MathBits/CompSci/Files/End.htmVergiss das, insbesondere die Box mit "Rule"! Eigentlich vergiss alles auf dieser Seite!
Unter anderem: assert benutzt man nicht für Checks, ob IO-Operationen erfolgreich waren, sondern für Programmlogik, die immer korrekt sein muss. Header in C++ sind ohne .h, usw. Also: das hat jemand geschrieben, der keine Ahnung von C++ hat.Klar, die Funktion gibt es und das Beispiel zeigt, wie man sie nutzen kann.
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.bpxbd00/feof.htm
feof ist nicht stream.eof
Auch besser nicht lesen.
Daher ist es natürlich für mich interessant zu hören das man das nicht tun sollte.
Aber egal, ich will mit solchen Details eure Geduld nicht zu sehr strapazieren. Sowas kann ich auch sicher irgendwo spezifisch lesen wie man EOF genau verwendet.
Danke jedenfalls für die Hilfe!Das "richtige" Pattern in C++ ist:
while (myfile >> wert) { // verarbeite Wert } //oder std::string line; while (std::getline(myfile, line)) { // verarbeite Zeile }
Also: du versuchst zu lesen so lange es geht. eof wird erst NACH einem fehlgeschlagenen Einleseversuch true. Wenn du
while (!file.eof()){ file >> wert; std::cout << wert << '\n'; }
hast, dann ist eof noch false, auch wenn du schon am Ende bist. file >> wert funktioniert dann nicht und setzt eof. Was steht dann in wert und warum wird der noch ausgegeben? Das passt nicht.
-
@wob sagte in Textfile auslesen:
@marsmännchen sagte in Textfile auslesen:
@wob wo in welchen Beispielen? z.b:
https://mathbits.com/MathBits/CompSci/Files/End.htmHaha, schon lange nicht mehr so einen veralteten Dreck gelesen.
-
Dieser Beitrag wurde gelöscht!