String zerlegen
-
Hey!
Ich wüsste gerne, wie ich folgende Zeichenfolgen am besten auswerten könnte:
[265] Brchi kills: 0 deaths: 1 ping: 11 Total players: 1Also jeweils eine Zeile habe ich in std::string gespeichert.
Würde gerne "[265]", "Brchi", "0", "1", "11" und "1" separat in einem string abspeichern.
Wie mache ich das? Es sind auch längere Namen dabei also könnte auch so aussehen:
[265] Brchi kills: 0 deaths: 1 ping: 11 [268] Archi kills: 0 deaths: 3 ping: 36 [270] Grchi kills: 3 deaths: 7 ping: 89 Total players: 3Hab schon ne Struktur angelegt, würde dann ein Array in länge der total players anlegen und ausfüllen.
Wie geht das am einfachsten und schnellsten?
-
lol
[265] Brchi kills: 0 deaths: 1 ping: 11 [268] Archi|2007 kills: 0 deaths: 3 ping: 36 [270] Grchi|entertainer kills: 3 deaths: 7 ping: 89 Total players: 3zB. sorry.
-
Erstmal zerlegen in Einzelwörter (substr; einfach string::find(" ") bishin zu string::npos) nehmen und dann davon eben Wort 1,2,4,6 und 8 nehmen

-
Den ersten Wert kannst du ja noch anhand der eckigen Klammern identifizieren, für alle weiteren Werte würde ich mich an den Doppelpunkten orientieren und die Zwischenworte ("kills" etc) von Hand rausschmeißen.
(alternativ kannst du auch per find() die Worte " kills: ", " deaths: " und " ping: " in deinem Text suchen und die Teile dazwischen als substr() rausschneiden)
-
Hmm ein konkretes Beispiel und ich habs verstanden. Brauche nen kleinen Anstoß ...
TCHAR recvText[2 * 512] = "Total players: 58";
Wie bekomme ich 58 in eine Variable?
Muss TCHAR sein weil bei string nix drin stehen würde bei LB_GETTEXT kA warum.
-
Also soweit bin ich mal:
TCHAT recvText[2 * 512]; ... .... SendMessage(list, LB_GETTEXT, itemCount - 1, (LPARAM)recvText); std::string buf = recvText; int i = buf.find(":"); windowTitle = buf.substr(i + 2);windowTitle isn string, is schlampig und faul sorry wollte grade keine neue Variable erstellen

Jedoch was wenn die Zahl 2 stellig ist? Bis jetzt lese ich das Zeichen zwei nach : ein?
-
Zerleg die Zeile einfach anhand der bekannten Fixpunkte, also "ping:", "deaths:", "kills:" und "]".
Und in der Reihenfolge. "ping:" kommt als letztes, also suchst du von hinten nach dem Fixpunkt. Alles was davor kommt nimmst du und machst links und rechts die Leerzeichen weg. Dann suchst du weiter rückwärts (von der Position ausgehend wo du "ping:" gefunden hast) nach "deaths:" und schneidest den Teil zwischen "deaths:" und dem Anfang von "pings:" aus, wieder Leerzeichen weg, das ist dein nächstes Element. Selbes Spiel für "kills:". Dann suchst du vom Anfang des Strings weg nach "]". Alles davor ist dann ein Element und alles zwischen der Position von "]" und dem Anfang von "kills:" ist der Name. Wenn du "ping:" nicht findest wird es wohl die "Total players" Zeile sein, das kannst du dann noch verifizieren wenn du möchtest. Wenn du dazwischen irgendein Element nicht findest hast du wohl einen String der nicht im erwarteten Format ist - musst du dann auch irgendwie behandeln.
Peace of Cake.
-
Thx habs nun endlich verstanden
