Bereiche eines Strings auslesen? (Wörter)



  • 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


Anmelden zum Antworten