aus einer Textdatei einlesen
-
Hallo zusammen,
also ich möchte in einer MFC-Anwendung von einer Textdatei einlesen...
soweit so gut, ich hab es schon mal soweit geschafft, etwas in den string einzulesen...
hier der auszug von meiner datei:
// Öffnen der Länder-Datei fileLoad.open("Länder.txt",ios::in); // Hat das anlegen der Datei funktioniert if (fileLoad) { while( ! fileLoad.eof()) { char help[300]; char help2[300]; float fhelp; CString command; // erste Zeile einlesen fileLoad.getline(help, sizeof(help)); command = help; if(command == "Austria") { fileLoad.getline(help, sizeof(help)); mLaender.AddString(Name); } }Jetzt habe ich das Problem, dass ich folgendes aus der ".txt"-Datei auslese:
"Austria", 26.4, 15.00
wenn ich jetzt alles in einen string einlese, funktioniert das ja nicht, kann ich das irgendwie splitten oder so??
ich möchte also "Austria" extra einlesen, 26.40 extra einlesen und 15.00 einlesen...
wie kann ich das am besten machen??
lg reink
-
CStringT Tokenize( PCXSTR pszTokens, int& iStart ) constdürfte dir helfen.
-
Pellaeon schrieb:
CStringT Tokenize( PCXSTR pszTokens, int& iStart ) constdürfte dir helfen.
und wie soll ich das dann anwenden??
kann mir da jemand weiterhelfen, weiß nicht recht wie ich das
anwenden kann!?!?
-
Wenn du mit Pallaeons Tipp nicht zurecht kommst probiers mal hiermit:
void SeparateString(CString string,int *values){ int old=0, pos=0; CStringArray string_array; while(-1!=(pos=string.Find(',',pos))){ string_array.Add(string.Mid(old,pos-old)); old = ++pos; } if(old < string.GetLength()) string_array.Add(string.Mid(old,string.GetLength()-old)); for(int i=0;i<3;i++){ values[i] = atoi(string_array[i]); } }Die Funktion teilt einen String in Einzelstrings (bei jedem ","). Bei mir waren es immer drei Integerwerte, musst es halt noch auf deine Bedürfnisse hin anpassen!
-
Wenn du die Methode da mal in der MSDN nachschaust, dann ist dort ein Code-Beispiel, wo erklärt wird, wie man den String zerlegt. Daher bin ich jetzt zu faul mir was auszudenken^^
-
reink13 schrieb:
Jetzt habe ich das Problem, dass ich folgendes aus der ".txt"-Datei auslese:
"Austria", 26.4, 15.00
wenn ich jetzt alles in einen string einlese, funktioniert das ja nicht, kann ich das irgendwie splitten oder so??
ich möchte also "Austria" extra einlesen, 26.40 extra einlesen und 15.00 einlesen...
wie kann ich das am besten machen??
Hallo reink,
Die Grundregel lautet: immer das Lesen, was Du später auch haben willst. In Deinem Fall also string, float, float - und der String steht in Hochkommata und zwischen den floats stehen noch Kommas. Das muss überlesen werden.Zum Überlesen baue man sich ein kleines Helferlein:
template< char C > std::istream& Char( std::istream& in ) { char c; if( in >> c && c != C ) in.setstate( std::ios_base::failbit ); return in; }das erfordert nur #include <iostream> und der Rest ist dann kein Problem
std::ifstream fileLoad("Länder.txt"); if( fileLoad.is_open() ) { float f1, f2; std::string cmd; if( getline( fileLoad >> Char<'"'>, cmd, '"' ) >> Char<','> >> f1 >> Char<','> >> f2 ) { // Lesen war Ok; Daten stehen in: cmd, f1 und f2 } }Gruß
Werner
-
Hallo Werner,
danke für deine Hilfestellung...
Jetzt habe ich noch folgendes Problemchen:[cpp]std::ifstream fileLoad("Länder.txt"); if( fileLoad.is_open() ) { float f1, f2; std::string cmd; if( getline( fileLoad >> Char<'"'>, cmd, '"' ) >> Char<','> >> f1 >> Char<','> >> f2 ) { // Lesen war Ok; Daten stehen in: cmd, f1 und f2 } } [/cpp]der compiler schreit, klarer weise, bei "getline"....
"getline": Bezeichner wurde nicht gefunden...Jetzt sieht es bei mir so aus:
[cpp] if( fileLoad.getline( fileLoad >> Char<'"'>, command, '"') >> Char<','> >> f1 >> Char<','> >> f2) { }[/cpp]und da kommt die fehlermeldung:
"Konvertierung des Parameters 1 von 'std::basic_istream<Elem,_Traits>' in 'char *' nicht möglichAbhilfe??
lg reinki
-
reink13 schrieb:
der compiler schreit, klarer weise, bei "getline"....
"getline": Bezeichner wurde nicht gefunden...#include <string>
und ggf. std::getline( .. ) falls Du noch VC6 benutzen solltest
Gruß
Werner