_Stringbetween

  • Habe mir mal nen bischen die Funktion _StringBetween benutzt und hab dazu mal ne Frage:

    Was ich im Quelltext habe sieht so aus: var pm = 5.5;

    [autoit]

    Func _checkPM($o_IE1)
    $source = _InetGetSource($o_IE1)
    $Powmodpruefung = _StringBetween($source, "var pm =", ";")
    Global $Powmodpruefung
    EndFunc

    [/autoit]

    So solls ungefähr aussehen nur denk ich mal, dass er dann mehrere Sachen ausm Quellcode rausfiltert weil es das ";" nicht nur einmal gibt.
    Ich brauche jedoch nur die Zahl zwischen "var pm=" und dem ersten ";". Gibts da ne möglichkeit zu sagen das er mir nur das erste raussuchen soll und die restlichen weglassen kann?

    Blubkuh

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • _Stringbetween gibt ein Array wieder.
    Muss also auch als solches behandelt werden.

    Außerdem kannst du nicht einfach eine lokale Variable in einer Funktion mit einem Wert belegen und dann erst global machen.
    Arbeite da lieber mit return.

    Mal als Beispiel wie es funktionieren sollte:

    [autoit]

    Func _checkPM($o_IE1)
    $source = _InetGetSource($o_IE1)
    $Powmodpruefung = _StringBetween($source, "var pm =", ";")
    Return $Powmodpruefung[0]
    EndFunc)

    [/autoit]

    Einmal editiert, zuletzt von AspirinJunkie (20. März 2007 um 07:15)

  • Thx genau das wars, was ich wissen wollte :)
    Ich lass hier ma noch offen, weil ich bestimmt nochma ne frage haben werde ^__^

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • ähm da es ned so wirklich funktioniert hab wollt ich ma gucken was für nen wert der array den wiedergibt...
    Herum kam, dass das Script abgeschmiert ist ~_~
    Scheint so als wär es doch kein Array? x)


    C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Gladiatorgame.au3 (126) : ==> Subscript used with non-Array variable.:
    MsgBox(0, " ", "PM= "&$Powmodpruefung[0])
    MsgBox(0, " ", "PM= "&$Powmodpruefung^ ERROR


    EDIT:
    $Powmodpuefung hat den Wert 0...
    ich weis aber garantiert das es immer folgendes im Quelltext gibt:

    var i=0,e=5;

    var pm = 3.3;

    trotzdem liest er es ned aus ~_~

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]

    Einmal editiert, zuletzt von Blubkuh (20. März 2007 um 15:53)

  • Hi Blubkuh,

    es wäre zur Fehlerlokalisierung sicherlich mal interessant, was Du da wie programmierst. Arbeitest Du nun mit Strings oder Arrays? Ein Mix davon läuft meistens auf den Hammer, wenn man es nicht richtig macht!

    Wie liest Du den Quelltext eigentlich ein? In ein Array? Oder zeilenweise?

    Ist vielleicht nicht ganz uninteressant, obwohl die Lösung von AspirinJunkie eigentlich grundsätzlich funktionieren sollte.

    EDIT:

    Hab das mal verifiziert. Das Grundprinzip der _StringBetween-Funktion, angelehnt an Dein Beispiel:

    [autoit]

    #include <String.au3>

    [/autoit][autoit][/autoit][autoit]

    $line = "var i=0,e=5;"
    MsgBox (0, "vorher", $line)
    $result = _checkPM ($line)
    MsgBox (0, "Ergebnis", $result)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _checkPM ($temp)
    $substring_arr = _StringBetween ($temp, "var i=", ";")
    Return $substring_arr[0]
    EndFunc

    [/autoit]


    Das Ergebnis ist jetzt zwar so wie Du es wünscht, aber eben doch noch nicht so ganz richtig, vermute ich mal. ;)

    Das Problem wird u.a. sein: Du suchst ja nicht nur nach "var pm=", sondern auch nach anderen Variablenbezeichnungen. Dann musst Du die Sache noch etwas anders angehen, sonst kommt sowas Komisches dabei heraus wie in meinem Beispiel.

    3 Mal editiert, zuletzt von Flex (20. März 2007 um 16:49)

    • Offizieller Beitrag

    Hi,

    das Problem ist, dass StringBetween ein Array zurückgibt, wenn es etwas gefunden hat. Du mußt aber auch gucken, was passiert, wenn es dies nicht tut. Also Fehlercode checken oder Ergebnis überprüfen.

    [autoit]


    #include <String.au3>

    [/autoit][autoit][/autoit][autoit]

    $line = 123;"var i=0,e=5;"
    MsgBox(0, "vorher", $line)
    MsgBox(0, "Ergebnis", _checkPM($line))

    [/autoit][autoit][/autoit][autoit]

    Func _checkPM($temp)
    $substring_arr = _StringBetween($temp, "var i=", ";")
    If IsArray($substring_arr) Then
    Return $substring_arr[0]
    Else
    Return "Nichts gefunden!!!"
    EndIf
    EndFunc ;==>_checkPM

    [/autoit]

    So long,

    Mega

  • danke an alle
    der Fehler lag beim einlesen des Quellcodes.
    Keine Ahnung warum die Funktion nicht funktioniert hat und ich hab jetzt einfach eine andere Funktion zum einlesen benutzt und schon gings :)

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • Zitat

    Original von th.meger
    das Problem ist, dass StringBetween ein Array zurückgibt, wenn es etwas gefunden hat. Du mußt aber auch gucken, was passiert, wenn es dies nicht tut. Also Fehlercode checken oder Ergebnis überprüfen.


    Das weiß ich. Ich hab das bei mir während der Fehlereingrenzung sogar gemacht. ;)

    Mein gepostetes Skript sollte auch nur eine rudimentäre Idee gewesen sein, anhand derer der OP verifizieren kann, was er falsch gemacht haben könnte. Es ist eigentlich selbstverständlich, dass jeder Programmierer seine Fehlerabfragen selbst einbaut.

    Oder hast Du mich vielleicht gar nicht gemeint? ;)

    Ich weiß nicht, aber irgendwie hab ich das Gefühl, dass ich hier nicht richtig bin. Somit war dies mein letztes Posting in diesem Forum. Sorry pee.

    • Offizieller Beitrag

    Hi,

    natürlich habe ich dich nicht gemeint, sondern wollte dem Threadersteller helfen.

    Aus unserer anderen Diskussion weiß ich doch, dass du dies alles weißt. Außerdem würde ich nie direkt jemandem der helfen will sagen, ey was ist das für ein Mist, mach es gleich vernünftig.

    Ich wußte halt nur nicht, ob dem Ersteller aus deinem Skript klar wird, wsa er falsch gemacht hat, + noch ich wollte einen Tipp auf den Weg geben.

    So long,

    Mega

  • Ich muss Stringbetween nehmen, weil ich nie genau wissen kann wie viele zeichen ich rechts und links "abschneiden" muss, weil quelltexte nicht immer gleich lang sind.

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • $source ist einige hundert Zeichen lang und je nach eingeloggtem User ändert sich diese.
    Mit StringTrimLeft usw muss ich ja angeben wie viele Zeichen ich weglassen möchte und da diese Zahl variiert kann ich das schlecht festlegen.
    Ausserdem ist das Prob ja jetzt schon gelöst und es funzt einwandfrei ^__^

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]