Textdatei lesen und anzeigen
-
Hallo,
ich habe in C++ folgendes vor.
Ich möchte aus einer Textdatei (text.txt) die Daten auslesen und anzeigen.
Wie mache ich das?Vielen Dank und Grüße
-
welche daten?
es gibt ca. 20versch. arten, eine datei auszulesen - wenn du uns sagst, was drin steht, können wir dir vll den in deinem fall besten weg zeigen

bb
-
In der Datei steht folgendes:
char zeichen[] = "qwertz";
int zahl = 1234;
float f = 12.34f;
string s = "hallo";
-
bordon schrieb:
In der Datei steht folgendes:
char zeichen[] = "qwertz";
int zahl = 1234;
float f = 12.34f;
string s = "hallo";Binär? Oder in Textform, wie du es geschrieben hast?
-
Ich möchte es sowohl Binär, als auch als Textdatei auslesen.
Darüber hinaus möchte ich die Daten in andere Variablen schreiben.
-
wer legt denn so was fest?
dafür ist c++ ein wenig ungeeignet...//strings zeichen = asd //ints zahl = 123 //floats f = 123.fwürde noch relativ einfach gehen.
aber schon zeichen[] wäre imho nicht all zu leicht zu parsen.
und man bräuchte vermutlich für jeden datentyp einen container(z.B. map mit key==string, in dem der name steht).es würde also auch so gehen:
string zeichen = asd int zahl = 123 float zahl = 123.f string zeichen2 = hjkl int q = 1234ein möglicher ansatz wäre:
struct values { template<typename T> struct container { typedef std::map<std::string, T> type; }; container<float>::type floats; container<int>::type ints; container<std::string>::type strings; friend std::istream& operator<< (std::istream& s, values& these) { std::string type; std::string name; std::string value; s >> type >> name >> skip_char<'='>(); std::getline(s, value); if(s.bad()) return s; if(type == "string") { strings[name] = value; return s; } std::stringstream ss; ss << value; if(type == "int") ints[name] << ss; if(type == "float") floats[name] << ss; /*evtl. noch failbits von ss auf s übertragen*/ return s; } private: template<char character> struct skip_char { friend std::istream& operator<<(std::istream& s, skip_char&) { char val; s >> val; if(val != character) s.setstate(std::ios::failbit); return s; } }; };bb
edit:
anzuwenden:int main() { values config_values; std::istream config("config.txt"); while(config_values << config); std::cout << config_values.strings["zeichen"] << std::endl; }
-
Viel besser:
x = "String" y = 10 z = 15.14141Sollte vom Parsen auch nicht sonderlich schwer sein.
-
ich will keine config-datei, in der ich nicht mal sehe, welchen typ und wertebereich eine variable hat...
und einfacher zu implementieren ist diese version auch keinesfalls...bb
-
Hab in einem Buch nachgelesen und folgende funktionierende Lösung geschrieben:
char var1[10]; int var2; float var3; string var4;
ifstream read("Text.txt");
read >> var1;
read >> var2;
read >> var3;
read >> var4;for(int i=0;i<=strlen(var1);i++){
cout << var1[i];
}
cout << var2 << endl;
cout << var3 << endl;
cout << var4 << endl;
-
aber nicht mit der text-datei von oben : D
-
Mit der Textdatei die ich angegeben hab! Funktioniert alles
-
troll?
char zeichen[] = "qwertz"; int zahl = 1234; float f = 12.34f; string s = "hallo";das hast du als txt-datei angegeben gehabt... das kann gar nich gehen oO
wenn natürlich nur
qwerzt 1234 12.34f hallodrin steht, geht es logischerweise - allerdings hättest du dann nicht so nen crap dazu schreiben müssen, der gar nicht drin stand... -.-'
naja - schön, dass es jetzt funktioniert...
bb
PS:
for(int i=0;i<=strlen(var1);i++){ cout << var1[i]; }->
cout << var1; //oder cout.write(var1, strlen(var1));oder aber besser:
//#include<cstring>, <cstddef>, <algorithm>, <iostream> const std::size_t max_size = 10; char var1[max_size]; read >> var1; cout.write(var1, std::min(strlen(var1), max_size));