AutoIt zu PHP

  • Grüß euch!
    ich habe ein Skript geschrieben, welches den HTML-Code von einer Website ausliest und in ein Array speichert. Dafür verwende ich momentan _INetGetSource () [Blockierte Grafik: http://traveleworld.com/images/tick.png], _StringBetween () [Blockierte Grafik: http://www.dsl-surfer24.de/custom_pages/gfx/icons/tick_off.gif], StringSplit (), StringLeft (), StringTrimLeft (), StringRight () und StringTrimRight () sowie _ArraySort ().
    Ich möchte das Skript jetzt auf meinen Webspace schieben und muss es dafür in PHP umformen.
    Ich habe es bereits geschafft, _INetGetSource () [Blockierte Grafik: http://traveleworld.com/images/tick.png] , zu umschreiben, Finde aber keine Funktion, die _StringBetween () [Blockierte Grafik: http://www.dsl-surfer24.de/custom_pages/gfx/icons/tick_off.gif] , ersetzt (keine Funktion schreibt die Ergebnisse in ein Array).
    Ich hoffe, hier kann mir jemand helfen.
    lg tobias
    PS: Ist etwas Offtopic; hoffentlich störts nicht allzu sehr

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

    Einmal editiert, zuletzt von tobi_girst (23. Februar 2012 um 17:32)

  • Du brauchst also eine Funktion, die das selbe tut wie _StringBetween()?

    Falls ja... Hier mal ein Ansatz:

    PHP
    function _StringBetween($s_String, $s_Start, $s_End, $v_Case = ''){
        $r = explode($s_Start, $s_String);
        if (isset($r[1])){
            $r = explode($s_End, $r[1]);
            return array($r[0]);
        }
        return '';
    }

    Zu beachten ist hierbei jedoch, dass $v_Case nur Deko ist und in der Funktion keinerlei Nutzen hat.

    Du musst jetzt nurnoch die Funktion in deinem Script unterbringen. Eine Ersetzung einzelner Zeilen ist damit nicht mehr von Nöten.

    EDIT:

    _StringBetween gibt ein 0 basiertes Array zurück. Hab die Funktion dahingehend mal verändert. Ansonsten könnte man auch mit einer Regexpression arbeiten. Da würde dann auch v_Case wieder eine Rolle spielen :)

  • Leider kenne ich mich mit regulären Ausdrücken nicht aus. Ich habe die UDF ausgegraben und den _StringBetween-Code so umgebaut:


    bei der Zeile 8 kommt folgende Fehlermeldung: Fatal error: Only variables can be passed by reference in D:\xampp\htdocs\readres.php on line 31
    ich habe aber keine Ahnung, ob ich überhaupt die richtigen Funktionen verwende :wacko: :wacko:
    SoftCreatR's Schnipsel habe ich auch nicht zurechtbekommen.
    Mein Programmierer-Herzgehört eben AutoIt; PHP brauche ich fast nie und kann deshalb auch nur die Basics.
    Bitte um Hilfe;
    tobias

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • PHP
    preg_match_all("/" . $s_Start . "(.*?)" . $s_End. "/s", $s_String, $a_preg, PREG_SET_ORDER); 
    	foreach ($a_preg as $a_tmp) {
    		array_push($a_ret, $a_tmp[1]);
    	}
    	Return $a_ret;


    Als Ergebnis findest du in $a_ret[] alle Strings zwischen $s_Start und $s_End. Kannst du dir dann mal testweise von print_r() ausgeben lassen.

    Das funktioniert aber erst, wenn du die beiden preg_replace() auskommentierst.
    Da machst du leider etwas falsch.

    Ich möchte dir den Spass da nicht verderben also schaust du besser mal selbst ins manual. Die Reihenfolge deiner Parameter stimmt nicht und $s_pattern_escape könntest du direkt als mit pattern gefülltes Array übergeben.

    EDIT:
    Egal! Bevor ich morgen nicht mehr an den Thread denke ...
    Aber erst reinschauen wenn du keine eigene Lösung findest.
    Tipp! Es gibt auch eine bessere Lösung zum escapen der Steuerzeichen - preg_... ;)

    Spoiler anzeigen
  • Edit: Hatte SoftCreatR ja schon gepostet und ist das gängige vorgehen für StringBetween in PHP. Das von i2c ist zwar nett anzusehen aber nicht nötig für das was haben willst.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    2 Mal editiert, zuletzt von chip (21. Februar 2012 um 08:51)

  • Es liefert alle Ergebnisse in einem 0-basierenden Array.

    Die Onlinehilfe:

    Code
    Erfolg:	Ein 0-basierendes $Array[0] enthält den ersten gefundenen String.


    Da fehlt allerdings ein Wörtchen, um das ganze gut verständlich zu machen.

    Code
    Erfolg:	Ein 0-basierendes Array.  $Array[0] enthält den ersten gefundenen String.
  • Danke i2c (und natürlich auch euch anderen)!
    Nun, ich bin mit dem Skript fertig; ich bin euch allen sehr dankbar!!
    lg tobias

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • i2c: Deine Funktion lässt sich noch verbessern:

  • Nunja, aber dann enthält der Rückgabewert wieder nur das erste match. Gewollt war aber ein array of matches wie bei _StrinBetween().

    Das preg_match_all() wird so auch unnötig. Wozu alle Übereinstimmungen suchen, wenn am Ende doch nur die Erste zurück gegeben wird.

  • Nunja, aber dann enthält der Rückgabewert wieder nur das erste match. Gewollt war aber ein array of matches wie bei _StrinBetween().

    Das preg_match_all() wird so auch unnötig. Wozu alle Übereinstimmungen suchen, wenn am Ende doch nur die Erste zurück gegeben wird.


    Nope, ich habe hier PREG_PATTERN_ORDER statt PREG_SET_ORDER eingesetzt. Dadurch hat das Array folgendes Format: $array[$Klammernummer][$Teffernummer]
    return $array[$Klammernummer] hat als Ergebnis also das Array $array2[$Ergebnisnummer]