Textdatei in Array einlesen (Trennzeichen)
-
Das ist kein C++, und schon langsam gehen mir die ganzen C++/CLI'ler auf den Wecker. Die M$-Idioten sollen mal aufhören ihren Scheiß als C++ zu bezeichnen -.-
-
314159265358979 schrieb:
Das ist kein C++, und schon langsam gehen mir die ganzen C++/CLI'ler auf den Wecker. Die M$-Idioten sollen mal aufhören ihren Scheiß als C++ zu bezeichnen -.-
Danke für diesen hilfreichen Beitrag ... wenn du genervt bist, okay, aber beleidigen musst du mich noch lange nicht dafür, auch wenn du mehr Ahnung von C++ hast.
-
314159265358979 schrieb:
Das ist kein C++, und schon langsam gehen mir die ganzen C++/CLI'ler auf den Wecker. Die M$-Idioten sollen mal aufhören ihren Scheiß als C++ zu bezeichnen -.-
Mal ne Frage: Warum ist das kein C++? Habs schon öfters gelesen, aber verstehe ich nicht, warum das kein C++ sein soll
-
tankwart schrieb:
aber beleidigen musst du mich noch lange nicht dafür, auch wenn du mehr Ahnung von C++ hast.
Wenn du dich bei "M$-Idiot" angesprochen fühlst, ist das dein Problem. Ich habe dich damit nicht gemeint.
Ikognito schrieb:
Mal ne Frage: Warum ist das kein C++? Habs schon öfters gelesen, aber verstehe ich nicht, warum das kein C++ sein soll
Es ist C++/CLI, eine Managed Sprache von M$.
-
Auch wenn das C++/CLI ist, kannst du mir ja vllt. trotzdem an der einen oder anderen Stelle weiterhelfen!?
-
tankwart schrieb:
Ich habe dazu folgenden Code von Werner Salomon gefunden:
...
Um das auf mein Beispiel anzupassen habe ich folgendes gemacht.
struct.h#include <string> struct Person { std::string vname; std::string nname; std::string alter; std::string geschlecht; }; std::istream& lese_ein( std::istream& in, Person& p ) ...
Bin ich denn auf dem richtigen Weg?
Im Prinzip ja, aber Du bist noch nicht weit gekommen. Die struct Person aus meinem Posting hat die Attribute Vorname, Nachname, Alter, Geschlecht. Aber die Person aus der von Dir angegebenen Datei
tankwart schrieb:
Ich habe eine Textdatei wo Daten (mit Semikolon getrennt) hinterlegt sind, die in ein zweidimensionales array eingelesen werden sollen. (kein Vektor)
Bsp.:
Hans Wurst;Hauptstr. 8;12345;Schulzendorf;1,81m
Marie Lehmann;Dorfstr. 1;54321;Müllerdorf;1,57m
...hat die Attribute Name, Straße, PLZ, Ort, Größe. Das solltest Du natürlich erst mal anpassen. Somit sieht die struct Person in Deinem Fall etwa so aus:
struct Person { std::string name; std::string strasse; std::string plz; std::string ort; double groesse_in_m; };
Das Einlesen ist entsprechend anzupassen. Achte darauf, dass die Größe vom Typ double ist. Das Zeichen 'm' (Meter) hinter der Größenangabe ist also zu überlesen. Schau Dir dazu mal die Char<>-Funktion aus diesen Beitrag an.
.. und warum eine 'lese_ein'-Funktion, wenn's der Streaming-Operator auch tut?
std::istream& operator>>( std::istream& in, Person& p )
:xmas2: Werner
-
Werner Salomon schrieb:
.. und warum eine 'lese_ein'-Funktion, wenn's der Streaming-Operator auch tut?
std::istream& operator>>( std::istream& in, Person& p )
:xmas2: Werner
Die "lese_ein"-Funktion splittet doch die Zeile genau bei dem Semikolon. Macht das der Streaming-Operator automatisch? Klar die Verknüpfung zur Struktur ist über das Objekt p gegeben, aber der eigentliche "Einleseprozess" würde doch wegfallen!?
-
tankwart schrieb:
Werner Salomon schrieb:
.. und warum eine 'lese_ein'-Funktion, wenn's der Streaming-Operator auch tut?
std::istream& operator>>( std::istream& in, Person& p )
:xmas2: Werner
Die "lese_ein"-Funktion splittet doch die Zeile genau bei dem Semikolon. Macht das der Streaming-Operator automatisch? Klar die Verknüpfung zur Struktur ist über das Objekt p gegeben, aber der eigentliche "Einleseprozess" würde doch wegfallen!?
er macht es automatisch, ja (wenn du es ihm beibringst^^).
und er ist nun mal wesentlich besser zu erkennen, als ein funktions-aufruf.bb
-
unskilled schrieb:
tankwart schrieb:
Werner Salomon schrieb:
.. und warum eine 'lese_ein'-Funktion, wenn's der Streaming-Operator auch tut?
std::istream& operator>>( std::istream& in, Person& p )
:xmas2: Werner
Die "lese_ein"-Funktion splittet doch die Zeile genau bei dem Semikolon. Macht das der Streaming-Operator automatisch? Klar die Verknüpfung zur Struktur ist über das Objekt p gegeben, aber der eigentliche "Einleseprozess" würde doch wegfallen!?
er macht es automatisch, ja (wenn du es ihm beibringst^^).
und er ist nun mal wesentlich besser zu erkennen, als ein funktions-aufruf.bb
Was bedeutet denn "Wenn ich es ihm beibringe"?
Ich muss ihm das Trennzeichen mitübergeben oder wie?
-
Du sollst den Operator selber schreiben! Und dabei darfste mit den Trennzeichen machen, wozu du lustig bist.
-
SeppJ schrieb:
Du sollst den Operator selber schreiben! Und dabei darfste mit den Trennzeichen machen, wozu du lustig bist.
Also ist es genau das Gleiche, wie die "Lese_ein"-Funktion? Wo ist dann der Vorteil?
-
tankwart schrieb:
SeppJ schrieb:
Du sollst den Operator selber schreiben! Und dabei darfste mit den Trennzeichen machen, wozu du lustig bist.
Also ist es genau das Gleiche, wie die "Lese_ein"-Funktion? Wo ist dann der Vorteil?
Du darfst die Funktion auch gerne
sdk4ht34i5heiddhe9c43h
nennen, dann weiß eben auch niemand, was sie tut und wie sie zu benutzen ist und sie arbeitet nicht mit den Mitteln der Standardbibliothek (z.B. Stream-Iteratoren) zusammen. Oder du kannst dich an existierende und durchdachte Konventionen halten.
-
Mir geht eher sowas auf den Senkel:
cerr << "Fehler beim Oeffnen der Datei" << endl;
Was spricht dagegen, das Problem anzuzeigen (zB Datei gesperrt, Datei existiert nicht) ?
-
Scheppertreiber schrieb:
Mir geht eher sowas auf den Senkel:
cerr << "Fehler beim Oeffnen der Datei" << endl;
Was spricht dagegen, das Problem anzuzeigen (zB Datei gesperrt, Datei existiert nicht) ?
Dagegen spricht, dass diese Information bei einem std::fstream schlicht nicht vorliegt. Die Fehlerbehandlung der Standard-IO-Library ist da eben sehr einfach gestrickt.
Ein Versuch wäre noch
ifstream file; file.exceptions( ios_base::failbit | ios_base::badbit ); file.open( "nicht-vorhanden.txt" );
was dann im Text der Exception steht, ist aber ausschließlich von der Implementierung der IO-Library abhängig. Bei MS kommt da auch nur:
ios_base::failbit set
also kein bisschen mehr an Info.
Bleibt noch der Rückfall in die C-Fehlerbehandlung - frag 'errno' ab. Wobei auch hier meines Wissens nicht garantiert ist, dass das gesetzt wird.
:xmas2: Werner