Numerischen Wert aus string isolieren



  • Moinsen,

    Versuche mit sscanf den numerischen Wert von searchid= aus einem String zu isolieren:

    char *sNewURL = "http://www.dom.tld/search.php?searchid=1234567&pp=25";
    
    int dSearchID = NULL;
    
    sscanf (sNewURL, "%*[^searchid=]%d%*[^\n]", dSearchID);
    

    Klappt nur leider nicht ganz so, wie ich mir das vorgestellt hatte.
    Im Erfolgsfall soll dSearchID den Wert 1234567 haben.
    Vermutlich liegts an meiner Umsetzung der RegEx - vertue mich da immer aufs neue.
    Evtl. ist sscanf auch nicht das richtige Werkzeug für diesen Fall - bin nur der Meinung, soein Problem schonmal mit sscanf gelöst zu haben, weiß nur nicht mehr genau wie. Bin für jeden Vorschlag zu haben 😉



  • sscanf hat nichts mit RegEx zu tun, sscanf ist C Standard, RegEx nicht.
    sscanf reicht für diesen Zweck aus:

    if( 1==sscanf (sNewURL, "%*[^=]=%d", &dSearchID) )
    

    wobei sscanf keine (int)Wertebereichsprüfung macht.



  • Danke - das searchid= könnte aber auch theoretisch an einer beliebigen Stelle hinter dem '?' stehen.

    Sollte der String aus irgend einem Grund anders aufgebaut sein, würde das Ergebnis nicht mehr stimmen

    wenn sNewURL = http://www.dom.tld/search.php?pp=25&searchid=1234567
    
    dann dSearchID = 25
    

    Wie sage ich dem sscanf, das nur der Wert hinter dem searchid= übernommen werden soll ?

    Regex habe ich nur erwähnt, da die sscanf format-Syntax Ähnlichkeit mit einem Regulären Ausdruck aufweist. Bereichsprüfung werde ich anders Umsetzen müssen.



  • Der Formatspecifier %[ bei scanf ist ein Scanset. Also einen Menge und keine exakter Text.

    Suche z.B. mit strstr nach searchid= und ab der Fundstelle dann weiter mit sscanf



  • Mit sscanf kann man keinen String suchen, dafür gibt es andere Funktionen:

    if( strstr(sNewURL,"searchid=") && 1==sscanf (strstr(sNewURL,"searchid="), "%*[^=]=%d", &dSearchID) )
    


  • Wieder was dazugelernt. Danke 👍


Log in to reply