Frage bez. StringInStr

  • Hallo Bastlerkollegen :)

    ich bräuchte eine Lösung für folgendes Problem:

    Mein Script soll einen Text, welchen ich mit "MouseClickDrag" einfange nach Schlüsselwörtern durchsuchen, und daraufhin richtig reagieren.

    Keine Angst das hab ich schon hinbekommen :D

    Aber:

    Diese Schlüsselwörter sollen nun Art Variablen enthalten. Ein kleines Beispiel:

    "+ xxxx Leben" <- dabei könnte "xxx" eine Zahl zwischen 1 und 1200 sein.

    Ich will also einen Parameter generieren, bei dem zwischen z.B. 300-1200 auf die eine Art reagieren würde, und von 1-299 auf eine andere weiße bzw gar nicht.

    also sollte in etwa so aussehen (Mir fehlt jedoch for dem "Leben" wie ich diesen Parameter festlege", da ja z.B. nach "+$L Leben" suchen würde)

    [autoit]


    MouseClickDrag("left", 269, 162, 600, 400)
    Sleep(150)
    Send("^c")
    $text=ClipGet()
    If StringInStr(ClipGet(), "+$L Leben") Then

    [/autoit]


    ...

    habs auch schon so versucht:

    [autoit]


    $Var= 300-1200
    MouseClickDrag("left", 269, 162, 600, 400)
    Sleep(150)
    Send("^c")
    $text=ClipGet()
    If StringInStr(ClipGet(), $Var " Leben") Then

    [/autoit]


    ...

    aber da krieg ich immer einen Error in expression :(

    hat jemand eine Idee?

    Ich meine klar könnte ich 1200 verschiedene "If StringInStr(ClipGet(), "+1173 Leben") Then" schreiben, aber das würde das script doch sehr langsam machen :(

    gibt es eine andere Lsg?

    Lg und vielen Dank

    Marle

  • Hallo!

    Ändere oben mal den Text Supermann gegen Vollflasche und probier das Teil.
    Hab Deine Frage allerdings nicht bis ins allerletzte gelesen (geb ich zu)
    (die übichen Lizenzkosten: KAAAFFFFEEEEE)


    Grüße

    German

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <file.au3>
    #include <array.au3>

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

    $text="Supermann"

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

    Dim $changetext[1]
    _changetext()
    $newtext=_changeit($text)

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

    msgbox(0,"der neue text ist", $newtext)

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

    Func _changeit($text)

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

    If IsArray($changetext) Then

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

    For $i = 0 To UBound($changetext) - 1

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

    $teil=StringSplit($changetext[$i],";")
    if $teil[0]=2 then
    $alttext=$teil[1]
    $neutext=$teil[2]

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

    if StringInStr($alttext,$text) then
    Return $neutext
    exitloop

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

    EndIf
    EndIf

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

    Next
    Return($text)
    EndIf

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

    EndFunc

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

    Func _changetext()

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

    Dim $changetext[3] ; Anzahl der zeilen unten null mitzählen

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

    $changetext[0]="nixnutz;Kompetenzträger"
    $changetext[1]="Schlafmütze;Leitungsträger"
    $changetext[2]="Vollflasche;Abteilungsleiterniveau"
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Danke für die Antwort,

    ich verstehe dein Script zwar nicht 100%,

    aber ich glaube du hast mich nicht richtig verstanden bzw wie du sagtest die Frage nicht gelesen.

    Ich will keinen Text ändern, nein ich will ihn auslesen bzw interpretieren lassen.

  • Mir fällt spontan StringTrimRight ein, habs aber noch nicht benutzt. (siehe AutoIt Hilfe ;) )

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • Mir fällt spontan StringTrimRight ein, habs aber noch nicht benutzt. (siehe AutoIt Hilfe ;) )

    hm das hab ich mir grad angeschaut, durch den Befehl scheint man ja nur Rechts bzw Links Zeichen abziehen können und ohne die Zeichen zb. inner MSg-Box ausspucken. Sorry hat aber glaub ich mit meinem Problem nichts zu tun.

    Ich weiß ja nichtmal obs mit autoit lösbar ist ?( , vieleicht hab ich auch mein Problem falsch formuliert, ich versuchs nochmal einfacher:

    Ich möchte diesen Funktionsteil:

    [autoit]


    If StringInStr(ClipGet(), "+10 Leben") Then
    ;...
    If StringInStr(ClipGet(), "+11 Leben") Then
    ;...
    If StringInStr(ClipGet(), "+12 Leben") Then
    ;...
    If StringInStr(ClipGet(), "+13 Leben") Then
    ;...
    If StringInStr(ClipGet(), "+14 Leben") Then
    ;...
    If StringInStr(ClipGet(), "+15 Leben") Then
    ;...

    [/autoit]

    vereinfachen was etwa so aussehen soll:

    [autoit]


    If StringInStr(ClipGet(), "+$10-15 Leben") Then
    ;...

    [/autoit]

    So klappt das aber leider nicht - da er im Text dann genau nach "+$10-15 Leben" sucht was er nie finden kann.

    besser verständlich ? :wacko:

  • Ich hoffe jetzt kann ich besser helfen.
    Also

    [autoit]

    While 1
    For $z = 1 to 1200 step 1
    $a = StringInStr(ClipGet(), "+"&$z&"Leben"); Schaut nach der Zahl
    Switch $a
    Case 1 to 300 ;Wenn es 1 bis 299 ist dann...
    ;Hier kommt rein was du machen willst wenn es zwischen 1 und 299 ist
    ExitLoop
    Case 300 to 1200 ;Wenn es 300 bis 1200 ist dann...
    ;Was du dann machen lassen willst
    ExitLoop
    Case Else
    ;Was bei einem Fehler passieren soll
    sleep(1)
    EndSwitch
    Next
    sleep(200);Pause wegen CPU
    Wend

    [/autoit]


    Aber es gibt keine Garantie dass es geht ;)

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    Einmal editiert, zuletzt von Fast2 (13. Dezember 2007 um 17:05)

  • Hallo!

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <file.au3>
    #include <array.au3>

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

    $text="+ 200 Leben"
    $cleantext=StringToNum($text)

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

    Dim $changetext[1]
    _changetext()

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

    $Praemie=_changeit($cleantext)

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

    msgbox(0,"die Vermittlungsprämie ist", $Praemie)

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

    Func _changeit($text)

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

    If IsArray($changetext) Then

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

    For $i = 0 To UBound($changetext) - 1

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

    $teil=StringSplit($changetext[$i],";")
    if $teil[0]=2 then
    $alttext=$teil[1]
    $neutext=$teil[2]

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

    if $text=$alttext then
    Return $neutext
    exitloop

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

    EndIf
    EndIf

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

    Next
    Return($text)
    EndIf

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

    EndFunc

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

    Func _changetext()

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

    Dim $changetext[3] ; Anzahl der zeilen unten null mitzählen

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

    $changetext[0]="100;Vermittlungsprämie 50,-- Euro"
    $changetext[1]="200;Vermittlungsprämie 75,-- Euro"
    $changetext[2]="300;Vermittlungsprämie 135,--Euro"
    EndFunc

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

    Func StringToNum($stringtoconv)

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

    Local $Hilf, $i, $convString
    $aryChar = StringSplit($stringtoconv, "")
    ; jetzt hab ich das Teil im array

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

    For $i = 1 To $aryChar[0]
    ; nur Ausgabe wenn Integer Wert
    $checkstring=StringIsInt($aryChar[$i])
    if $checkstring=1 then
    $convString = $convString & $aryChar[$i]
    EndIf

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

    Next

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

    Return $convString

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

    EndFunc

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


    ansonsten kannst Du mit

    Select
    case $leben > 49 AND $Leben < 101
    msgbox(0,"huhu","zwischen 50 und 100")
    case $leben > 100 and $leben < 500
    msgbox(0,"huhu", "zwischen 100 und kleiner 500")
    case else
    msgbox(0,"huhu", "irgend was anders")

    EndSelect

    Arbeiten - sorry habs jetzt 3 mal gelesen, ich verstehs nicht

    Schau mal meine neue Funktion StringtoNum an (das geht technisch besser, aber vielleicht einfacher zu verstehen!!)

  • sollte doch reichen oder?

    [autoit]

    $string = "+ 1200 Leben"

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

    $var = StringRegExpReplace($string, "[^0-9]", "")
    If Number($var) > 299 And Number($var) <= 1200 Then MsgBox(0,"",$var)

    [/autoit]