nachricht parsen



  • hi
    wie kann ich eine nachricht parsen. hab absolut keine ahnung davon.
    jemand n link zum tutorial oder weiß jemand wie es geht?
    gruß
    ebrosius



  • Dein Beitrag ist zu allgemein.



  • also ich habe einen bot für irc chat geschrieben. der kann jetzt auf nachrichten antworten. allerdings muss ich ihm die komplette nachricht die der server übermittelt übergeben. muss also die servernachricht auseinander nehmen, um nur den text den der user schreibt zu übergeben.
    bsp:
    server: :username!blabbla ... PRIVMSG #channel : hi
    muss das "hi" nur rausfiltern



  • Hallo

    nimm z.B. std::string und nutzt die Methoden, um das unpassende rauszufiltern.

    bis bald
    akari



  • hmmm...das sagt mir jetzt auf anhieb erstmal garnichts



  • im allgemeinen ist parsen recht kompliziert, aber in deinem fall scheint die lösung einfacher zu sein: nach dem ersten vorkommnis von "#channel:" suchen und den text dahinter extrahieren:

    #include<string>
    #include<algorithm>
    
    using namespace std;
    
    string
    extract_word (const string &str, int pos=0)
    // extrahiere wort ab position pos
    // führende leerzeichen werden übersprungen
    {
      // führende leerzeichen überspringen
      int start=str.find_first_not_of(" ",pos);
      if(start==string::npos) start=msg.size();
    
      // wortende finden
      int end=str.find_first_of(" ",start);
      if(end==string::npos) end=msg.size();
    
      // wort kopieren
      string word(end-start);
      copy(str.begin()+start,str.begin()+end,word.begin());
    
      return word;
    }
    
    string
    extract_field (const string &msg, const string &key)
    // extrahiere wort, daß auf das schlüsselwort key folgt
    // gibt "" zurück, falls key nicht in msg vorkommt
    {
      string word;
      int start=msg.find(key);
      if(start!=string::npos) // schlüsselwort gefunden
        word=extract_word(msg,start+key.size());
    
      return word;
    }
    
    string
    extract_channel (const string &msg)
    {
      return extract_field(msg,"#channel :");
    }
    

    ob der code tatsächlich funktioniert hängt von der syntax der message im detail ab. und die kenn ich leider nicht.



  • das sieht doch schonmal sehr gut aus.
    dank dir konfusius. muss jetzt erstmal arbeiten gehn. heut abend probier ich das mal aus.
    thx


Anmelden zum Antworten