if(...) // mache so lange weiter, bis keine Daten mehr //in std::string aInhalt vorhanden sind { wDaten st1; st1.beg = (int) temp1; //temp1 ist ein std::string st1.en = (int) temp2; st1.wWert = (float) temp3; st1.Sonstige = (int) temp4; vecBla.push_back(str1); }
st1 muß vom Typ "wDaten" sein. in st1 muß jeder Wert einzeln eingelesen werden.
Wenn ich jetzt einfach str nehme (nach dem Code von 0xdeadbeef) läuft das ganze doch gar nicht! Dann habe ich ja ein Vector, dessen Element aus "einer" "Zeile" besteht. Jedes Element soll aber 4 Unterpunkte haben, d.h.
Das erste Element von vecBla soll dann so aussehen: "beg = 5556 en = 6556 wWert = 5 Sonstige = 98"
und nicht so: "5556 6556 5 98"
Verstehst Du was ich meine? Oder reden wir die ganze Zeit irgendwie aneinander vorbei?
Ich bin ganz durcheinander!
@0xdeadbeef
Habe ich mir noch nicht durchgelesen, mache ich gleich!
Um den Stringstream wirst du nich drumrum kommen, einfache Casts ala
C++:
char *bla = "1234"; int x = (int) bla;
haben nicht den gewünschten Effekt. Danach hast du in x nur Müll stehen (bzw. eine Speicheradresse, an der "1234" steht). -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra
Gegen den Stringstream habe ich ja nischt gesagt. Ich mache es ja selbst so!
ich lese die Zeile in ein std::string übergebe es an eine Funktion, die mir die Zeile aufgesplittet als "vector (test) übergibt"
und in Wirklichkeit setze ich den ZwischenVektor (test) ein. Nämlich so:
Code:
if(...) // mache so lange weiter, bis keine Daten mehr //in std::string aInhalt vorhanden sind { wDaten st1; st1.beg = (int) test[0]; //temp1 ist ein std::string st1.en = (int) test[1]; st1.wWert = (float) test[2]; st1.Sonstige = (int) test[3]; vecBla.push_back(str1); }
Ach so. Ich verstehe zwar nicht, warum du das so umständlich machst, aber so könnte es funktionieren. Warum liest du das Zeug in ein Array ein, und nicht gleich in dein WDaten-struct? -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra
Es funkt ja auch, aber es ist einfach zu langsam, ich habe ja noch andere Strings in der Form und wenn dann 1000de von solchen Strings so durchgearbeitet werden müssen, dann gute Nacht! Es ist einfach zu langsam.
>Warum liest du das Zeug in ein Array ein, und nicht gleich in dein WDaten-struct?
Wenn du kein Problem damit hast, Operatoren zu überladen, wäre das natürlich am einfachsten - hab ich ja oben schon beschrieben. Dann sieht das nur noch so aus:
C++:
s.str(aInhalt); s >> wd; if(s.fail()) throw s; else vecBla.push_back(wd);
Die Fehlerbehandlung musst du halt entsprechend anpassen, throw s; allein bringt es wahrscheinlich nicht so richtig. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe DijkstraDieser Post wurde am 30.07.2003 um 15:26 Uhr von 0xdeadbeef editiert.