Bereiche eines Strings auslesen? (Wörter)
-
?
-
?
-
?
-
Blöde frage aber wie fängst du Nachrichten von battelnet aber?
-
?
-
Original erstellt von Perner:
Es es möglich von einem String, nen bestimmten bereich auszulesen?
Der battle.net Server sendet, wenn man ganz normal in den Channel etwas sagt
[ Dieser Beitrag wurde am 25.11.2002 um 19:42 Uhr von [qb]Perner editiert. ][/QB]War daruf bezogen.
-
Ja das is halt Server Protokoll.
Immer wenn etwas geschieht, sendet der Server an dich eine Nachricht.Kommt jemand in den Channel in dem du dich befindest, sendet dir der Server
1002 JOIN Perner 0000 [STAR]oder wenn ihn jemand wieder verlässt
1003 LEAVE Perner 0000 [STAR]schreibt jemand eine Nachricht, schickt er dir folgendes:
1005 TALK Perner 0000 "hallo"Dies bekommt man alles in einem String.
Es ist aber etwas mühselig rauszusuchen, wer jetzt gerade mit dir chattet.
Deshalb will ich das so machen, dass wenn sich im String die ID 1005 befindet, das mir mein Programm nicht
'1005 TALK Perner 0000 "hallo"' sondern
'Perner sagt: "Hallo"' in mein Chat fenster schreibt.Dazu soll er dann natürlich aus dem String entnehmen wie der Chatter heißt.
Die if abfrage soll dann so aussehen:if (strRecivedID == "1005"); { CString strChatterName = 3tes Wort CString strChatterMessage = 5tes Wort m_ctlRecvd.AddString(strChatterName+" sagt: "+strChatterMessage) }
Ist das irgendwie so machbar?
Das was ich suche ist der richtige code für 3tes und 5tes Wort.Danke im Voraus
[ Dieser Beitrag wurde am 25.11.2002 um 23:00 Uhr von Perner editiert. ]
-
Da der String mt einen Trennzeichen versehen ist kann man danach suchen und den String parsen
CString member Find liefert die Position des vorkommens des Suchzeichens.
Danach den string mit Mid,Left,Right extrahieren.
-
Wenn ich einen string aufteile mach ich das immer so:
char* data = "1003 LEAVE Perner 0000 [HALLO]" char* nummer = NULL; char* beschreibung = NULL; char* person = NULL; char* code = NULL; char* nachricht = NULL; char* term; nummer = data; term = strchr( data, ' ' ); *term = '\0'; term++; beschreibung = term ; term = strchr( term , ' ' ); *term = '\0'; term++; person = term; term = strchr( term , ' ' ); *term = '\0'; term++; ...
must du noch ein parr fehler abfangen wenn mal kein Leerzeichen gefunden wurden.
Habe das aber jetzt nicht getestet nur schnell geschrieben.
-
Das geht mit CString viel einfacher.
Devil
-
Original erstellt von devil81:
**Das geht mit CString viel einfacher.Devil**
und Wie???????????????????
-
Hallo,
also ich würde des so machen:
CString komischerStringvondemServer=blablabla...
if(komischerStringvondemServer.Find("1002")!=-1) {
int a=komischerStringvondemServer.Find("\"");
int b=komischerStringvondemServer.Lenght(); <- oder so ähnlich
CString message=komischerStringvondemServer.substring(a,b); <- oder so ähnlich}
und dann hast du des was du wolltest, oder?
Bye!
Stefan
-
mhh, die lösung ist nicht schlecht, aber ich will die Wörter "richtig" auslesen, damit ich weiß wie ein bestimmter chatter heißt.
Für 'Perner sagt:' z.B
PS: @ Devil:
Wie geht denn deine CString lösung? Daran wäre ich interessiert.[ Dieser Beitrag wurde am 26.11.2002 um 19:43 Uhr von Perner editiert. ]
-
Das Problem ist das du ein Trennzeichen brauchst.
in dem Fall ' ' also Leerzeichen, funzt solange jemand kein Leerzeichen im Namen
hat, es sei denn man könnte das nächste element nach dem namen identifizieren,
z.B. wenn dort immer ein " steht.Devil
-
Es ist im Battle.net nicht möglich einen Account mit Leerzeichen zu Registrieren, das dürfte also kein Problem sein
' ' ist nun also unser Trennzeichen.
-
Die frage ist jetzt nur noch, wie ich jetzt nach den Wörtern suche.
(Mit CString, das mit dem Char* Kapier ich nicht)
-
Hi Perner,
ich hoffe, der folgende Code hilft dir weiter:CString sEmpfangen; // Der String, den du von Battle Net bekommst sEmpfangen = "1002 TALK Perner 0000 \"hallo\""; // Dein Empfangsbeispiel CString sUsername,sNachricht,sNachrichtenart; // erklärt sich ja von selbst int iPosition = sEmpfangen.Find(' '); // iPosition enthält die Postition des ersten Leerzeichens int Nachrichtenart = atoi(sEmpfangen.Left(iPosition)); // Nachrichtenart enthält 1002 int iPositionNeu = sEmpfangen.Find(' ',iPosition+1); // sucht ab Position nach Leerzeichen sNachrichtenart = sEmpfangen.Mid(iPosition+1,iPositionNeu - iPosition); // sNachrichtenart ist TALK iPosition = iPositionNeu; iPositionNeu = sEmpfangen.Find(' ',iPosition+1); // ist ja inzwischen klar sUsername = sEmpfangen.Mid(iPosition,iPositionNeu - iPosition); iPosition = iPositionNeu; iPositionNeu = sEmpfangen.Find(' ',iPosition+1); sNachricht = sEmpfangen.Right(sEmpfangen.GetLength() - 1 - iPositionNeu); m_ctlChatfenster.AddString(sUsername+" sagt: "+sNachricht); UpdateData(FALSE);
Mfg, TakeItEasy
-
JUHU!!!! ES KLAPPT :DDDDDDDDDDD
DANKE DANKE UND NOCHMALS DANKE!
DAS BEDEUTET MIR SEHR VIEL :DDDDDDDDDDDDDDDDD
-
@takeiteasy
Also noch länger gings ja fast net mehr!CString sEmpfangen; // Der String, den du von Battle Net bekommst sEmpfangen = "1002 TALK Perner 0000 \"hallo\""; // Dein Empfangsbeispiel char szUserName[100], szNachricht[100], sNachrichtenArt[100]; int NachrichtenArt, unused; sscanf( sEmpfangen, "%d %s %s %d %s", &NachrichtenArt, szNachrichtenArt, szUserName, &unused, szNachricht); sUsername = szUserName; sNachricht = szNachricht; sNachrichtenart = szNachrichtenArt;
Nachtrag:
Man kann sich die Stringbuffer auch gleich mit GetBufferSetLength aus den CStrings holen[ Dieser Beitrag wurde am 27.11.2002 um 08:26 Uhr von RenéG editiert. ]
-
@RenéG
Das ist natürlich besser, aber den Befehl "sscanf" kannte ich nicht.
Man lernt ja nie aus.mfg, takeiteasy