int, float, char,... aus datei lesen
-
hallo,
ich will ein programm schreiben, das mir ein paar daten au einer datei lädt. die datei soll etwa so aufgebaut sein:
name: peter lustig
alter: 123
ort (x,y,z): 20, -50, 2
...und jetzt will ich den name, das alter, den ort, ... in einzelne variablen speichern.
ich hab die komplette datei mal zeile für zeile in ein array kopiert (habe gedacht, dass man dann besser damit arbeiten kann)mein quelltext sieht bis jetzt so aus:
struct tfile{ char str[100]; }; tfile lines[100]; int load(int nr) { std::ifstream is(nr + ".txt"); if(!is) return 0; char temp[100]; int counter = 0; while(!is.getline(temp, 100).eof()) { strcpy(lines[counter].str, temp); counter++; } return 1; }
aber wie kann ich jetzt die einzelnen daten "herausholen"? (so, dann z.B. NUR der name ohne den string "name: " in die variable gespeichert wird)
oder wie kann ich die einzelnen koordinaten bekommen? (bei ort)
-
nutze den stringstream
-
damit kann ich nen string in int etc umwandeln, aber wie kann ich den text und die zahl trennen ( z.B. "alter: 123")
-
Hallo Nuclearspider!
Wie funktioniert denn Deine Zeile(std::ifstream is(nr + ".txt");
? Habe das bei mir auch probiert. Brauche nämlich einen "dynamischen" Namen für die Datei.
Gruß, sole.
-
Ich würde dir zu binären Dateien raten:
int main() { // // In Datei schreiben // int alter = 21; std::string name = "Chantalle"; int len = name.length()+1; // +1 wegen \0 ofstream fout("test", ios::binary); fout.write((char*)&alter, sizeof(int)); // Alter fout.write((char*)&len, sizeof(string::size_type)); // Länge des Namens fout.write(name.c_str(), sizeof(char)*len); // Der Name selbst fout.close(); // // Aus Datei lesen // int in_alter = 0; int in_len = 0; char* in_name = 0; ifstream fin("test", ios::binary); fin.read((char*)&in_alter, sizeof(int)); // Alter fin.read((char*)&in_len, sizeof(string::size_type)); // Länge des Namens in_name = new char[in_len]; fin.read(in_name, sizeof(char)*in_len); // Der Name selbst fin.close(); cout << in_name << " ist " << in_alter << " Jahre alt!"; }
Ansonsten:
strcpy(temp, temp+strlen("Alter: ")*sizeof(char));
-
danke,
so geht das ganze recht praktisch.@sole2202:
ich glaube das hat soweit funktioniert. bin mir aber nichtmehr sicher.
-
Jetzt hab ichs auch rausbekommen. Mit ner String Variablen + ".txt" funktioniert es nicht. Man muss die zwei Variablen zusammenkopieren und dann beim öffnen an die Variable ein c_str anhängen.
Kleines Beispiel:
cout << "Bitte geben Sie die Kundennummer ein:" << endl; cin >> kuNummer; kuId = kuNummer + ".txt"; fstream kuFile(kuId.c_str(), ios::out| ios::in);
Die Funktion c_str() stellt den Dateinamen in einer für open verträglichen Form als C-String dar.
-
ich würde die Datensätze ganz anders in Datei schreiben. Lese und schreibe binär und nutze Strukturen. Und lasse solche sachen wie 'Name:', 'Ort:' etc weg