ifstream zeile steuern?
-
hi,
meine datei ist so aufgebaut:
x MeinText, Hallo, Samuel usw..nun will ich, dass was nach dem "x" steht steuern und in meine struktur einfügen, also dann so:
... struct Einlesen { std::string Text; std::string User; std::string Schrift; }; ... Einlesen MeineDatei; // jetzt soll z. b. "Hallo" an MeineDatei.User weitergegeben werden // dann soll z. b. "Samuel" an MeineDatei.User übergeben werden usw...also so, dass ich genau steuern kann, welcher inhalt der zeile an welche variable weitergegeben wird.
danke schonmal
p. s.: meine datei hat immer das gleiche muster
also:x bla,blabla,bla2
-
Ganz schlau werd ich zwar noch nicht aus deinem Post, aber schau dir mal string::find() und string::substr() an.
-
sry, habs ein bisschen verwirrend geschildert:
also mit .find() such ich die "x" zeile(n) raus, nun will ich was nach dem x in meine struktur einfügen
-
Also etwa so (ohne Validierung der Zeilen)?
struct Einlesen // schlechter Name { explicit Einlesen(string arg) { vector<string> args = getArgs(arg.substr(2)); Text = args[0]; User = args[1]; Schrift = args[2]; } private: vector<string> getArgs(string line) { vector<string> args; string::size_type pos1 = 0; string::size_type pos2 = line.find(","); while(pos2 != string::npos) { args.push_back(line.substr(pos1, pos2 - pos1)); pos1 = pos2 + 2; pos2 = line.find(",", pos1); } return args; } string Text; string User; string Schrift; // Was soll das sein? };
-
Vielen Dank, aber ich brauch das mit Validierung, weil es mehrere "x"-Zeilen gibt
-
Naja, die Validierung sollte hier ja schnell gehen:
#include <algorithm> bool isLimiter(char arg) { return arg == ',' && *(&arg + 1) == ' '; } if(args.substr(0, 2) != "x " || count(args.begin(), args.end(), isLimiter) != 2 || args[args.length() - 1] == ',' || arg[2] == ',') passt nicht;
-
Oder du baust dir nen regulären Ausdruck zusammen.
-
samuelb. schrieb:
Vielen Dank, aber ich brauch das mit Validierung, weil es mehrere "x"-Zeilen gibt
musste die struktur immer bis x einlesen und gucken, ob alle strukturelemente nen sinnvollen inhalt bekommen haben.
-
danke Michael E., aber ich hab da noch ein Problem: ich will jetzt die inhalte der datei (also nach "x") in eine for-schleife einfügen, also ungefähr so:
for(int i = 0; i < 3; i++) { echo << Text[i] << endl; echo << User[i] << endl; echo << Schrift[i] << endl; }
-
Genau andersrum:
vector<Einlesen> myObjects; for(int i = 0; i < myObjects.size(); ++i) { cout << myObjects[i].Schrift; etc. }