[PHP] - Sscanf anweisung funktioniert nicht

  • Hallo,
    ich brauche hilfe bei der anweisung für die sscanf Funktion.. komme bei PHP mit der nicht so ganz klar.
    Und zwar geht es darum aus einer Zeile entsprechende Variablen raus zu picken.


    Bsp:
    <object id="object (ballypllr01_lvs) (1)" interior="0" collisions="true" alpha="255" doublesided="false" model="3437" scale="1" dimension="0" posX="3349.21826" posY="-1396.10474" posZ="257.07605" rotX="0" rotY="90" rotZ="0"></object>



    Anweisung:


    for ($i = 0; $i < count($schreiben); $i++) {
    if (strpos($schreiben[$i], "<object id=")) {
    if (!sscanf($schreiben[$i], "<object id='%s' interior='%d' collisions='%s' alpha='%d' doublesided='%s' model='%d' scale='%d' dimension='%d' posX='%f' posY='%f' posZ='%f' rotX='%f' rotY='%f' rotZ='%f'></object>", $id, $interior, $collisions, $alpha, $doublesided, $obj_id, $scale, $dimension, $posX, $posY, $posZ, $rotX, $rotY, $rotZ)) {


    $mapstring = "\n CreateGameModeObject(".$obj_id.", ".$posX.", ".$posY.", ".$posZ.", ".$rotX.", ".$rotY.", ".$rotZ.", ".$scale.", ".$collisions.", ".$interior.");";


    fwrite($writenewfile2, $mapstring);
    } } }


    Es klappt nur das mit dem sscanf nicht.





    Kenne die leider nur aus Pawn und komme hier nicht weiter.


    Wäre nett wenn mir jemand helfen könnte.

  • Hallo,


    voerst gibt es in PHP-DOM die Möglichkeit Tags wie deinen object-tag zu bauen,
    damit könntest du rein theoretisch objektorientiert properties vergeben statt im Quellcode mit HTML arbeiten zu müssen
    oder du wählst wahlweiße eine Templateengine wie Smarty 3 (oder du liest dir diese Werte ein, dann benötigst du natürlich kein Dokumenten Model).

    PHP
    if (!sscanf($schreiben[$i], "<object id='%s' interior='%d' collisions='%s' alpha='%d' doublesided='%s' model='%d' scale='%d' dimension='%d' posX='%f' posY='%f' posZ='%f' rotX='%f' rotY='%f' rotZ='%f'></object>",                                                                     $id, $interior, $collisions, $alpha, $doublesided, $obj_id, $scale, $dimension, $posX, $posY, $posZ, $rotX, $rotY, $rotZ))

    sscanf wird probleme mit deinen einfachen Anführungszeichen haben, in deiner <object> Definition verwendest du doppelte, in deinem pattern einfache.
    Außerdem müsstest du diese escapen, wobei ich mir nicht sicher bin ob sscanf hier wirklich der Mittel zum Weg ist.
    Eine Lösung per regex wäre folgende (und knapper), dass pattern gibt die Properties vor, anschließend wird ein Standard Object mit den Properties befüllt.
    Besser wäre natürlich eine Klasse mit den Properties und getter / settern:


    Live: http://sandbox.onlinephpfuncti…d4f80a19df802930e766bb598




    Grüße

    [align=center]
    Mta Script Editor - Work in Progress

  • Hallo,


    du kannst auf der sandbox.onlinefunctions.com den Code wahlweiße direkt ausführen.


    Du kannst auf das Standardobjekt mit "->" zugreifen, da property.


    PHP
    <?php
    
    
    /* nach der deklaration von $params */
    print $params->id;
    print $params->interior;
    ?>

    [align=center]
    Mta Script Editor - Work in Progress

  • Eigentlich brauchst du hier kein Pattern, klar ist es eine schöne Überprüfung, ob die Werte passen und co, aber in diesem spezifischen Fall eigentlich nicht erforderlich, da du das ja eh nur 1:1 übertragen willst in eine andere Form.


    Da kannst du theoretisch auch nur so etwas tun:


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Eigentlich brauchst du hier kein Pattern, klar ist es eine schöne Überprüfung, ob die Werte passen und co, aber in diesem spezifischen Fall eigentlich nicht erforderlich, da du das ja eh nur 1:1 übertragen willst in eine andere Form.


    Da kannst du theoretisch auch nur so etwas tun:



    Vielen Dank das klappt auch und komme ich sogar besser mit klar.
    Ich bedanke mich jedoch bei euch beiden, ihr habt mir wirklich sehr geholfen. Vielen Dank :)