C++ (kein QT), Zeilenende wird beim Einlesen ignoriert

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
mampfi
Beiträge: 42
Registriert: 4. Juni 2015 11:32

C++ (kein QT), Zeilenende wird beim Einlesen ignoriert

Beitrag von mampfi »

Wollte eine csv-Datei einlesen (importieren) nach der Methode "Zeichen einzeln lesen.

Nun wird aber offenbar das Zeilenende ignoriert.


Gibt es einen Mode, bei dem binär einliest?






void datei_les_csv_test()

{
cout << "----------- Hier ist datei_les_csv_test()" << endl << endl;


//ifstream textDatei("datei.csv");
ifstream textDatei("datei.csv", ios::in);


str = "";
zeichen=' ';

while (! textDatei.eof())
{
textDatei >> zeichen;


printf("%c %d|", zeichen, zeichen);


if (zeichen == 10) cout << "Zeilenende erkannt" << endl;


///if (zeichen == ';' || zeichen == 10) //!!!!!!!!! DAS HIER GEHT OFFENBAR NICHT
if (zeichen == ';')
{
cout << endl << "str=" << str << endl << endl;;
str="";

}
else
str += zeichen;
} //if (zeichen == ';')
}

------------------------------------------------------------------------------------------------------------------------

Testdatei (die am Ende der Zeile natürlich keinen Strichpunkt hat):

AA;BB;CC
DD;EE;FF
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: C++ (kein QT), Zeilenende wird beim Einlesen ignoriert

Beitrag von RHBaum »

textDatei >> zeichen;
glaub der streamoperator für text (<< >> ) manipuliert/filtert das whitespace/endl zeugs.
Das verhalten kann man aber auch unterdruecken ... dann liest er ein was er kann ^^

mit getline kannst schon mal auf endl's reagieren, musst nur noch nach ";" separieren.

Aber für performance und flexibilitaet würd ich mich ned auf die stl streams verlassen.
Für solche "low level" zugriffe solltest dann "binaer" lesen (istream::read) und die daten selber interpretieren oder interpretieren lassen (spazialisierter tokenizer)...

Ciao ...
Antworten