2 Hexwerte überprüfen, dann Aktion

  • Hallo

    Folgendes, ich habe mit einer Regex 2 Hex Werte gefangen. Von denen beide je 8 stellig sind.
    Und bevor Autoit eine nächste Aktion dürchführen sollte, wollte ich das von 2 Bedingungen abhängig machen. Das heißt, jeder Hex Wert sollte überprüft werden ob dieser sich auch zwischen 2 Hexwerten befindet. Somit währen es dann eigentlich 4 Bedingungen.


    [autoit]


    If IsArray($a_Regex_mit_2_Hexwerten) = True Then

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

    $min_Wert1 = "43BFDFC8"
    $max_Wert1 = "44213CA2"
    $min_Wert2 = "4449A260"
    $max_Wert2 = "4464ECD7"

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

    If $a_Regex_mit_2_Hexwerten[0] NOT < $min_Wert1 = AND NOT > $max_Wert1 Then

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

    IF $a_Regex_mit_2_Hexwerten[1] NOT < $min_Wert2 = True AND NOT > $max_Wert2 Then

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

    ; Aktion

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

    EndIf
    EndIf

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

    Else
    ;weiter
    EndIf

    [/autoit]

    ...klappt leider so nicht. Aktion wird nicht ausgeführt! Bitte um Rat :)

    Einmal editiert, zuletzt von John (24. Juli 2011 um 16:21)

  • Dec()
    mal außen rum das es zu einem zahlenwert wird

    du vergleichst gerade zwei strings
    des weiteren ist dein aufbau nicht korrekt

    [autoit]

    If NOT $a_Regex_mit_2_Hexwerten[0] < $min_Wert1 AND NOT $a_Regex_mit_2_Hexwerten[0] > $max_Wert1 Then

    [/autoit]


    ist doch auch im prinzip das selbe als wenn du prüfst

    [autoit]

    If $a_Regex_mit_2_Hexwerten[0] > $min_Wert1 AND $a_Regex_mit_2_Hexwerten[0] < $max_Wert1 Then

    [/autoit]

    also vom Prinzip her

    [autoit]

    If IsArray($a_Regex_mit_2_Hexwerten) = True Then
    $min_Wert1 = "43BFDFC8"
    $max_Wert1 = "44213CA2"
    $min_Wert2 = "4449A260"
    $max_Wert2 = "4464ECD7"
    If dec($a_Regex_mit_2_Hexwerten[0]) > dec($min_Wert1) AND dec($a_Regex_mit_2_Hexwerten[0]) < dec($max_Wert1) Then
    IF dec($a_Regex_mit_2_Hexwerten[1]) < dec($min_Wert2) AND dec($a_Regex_mit_2_Hexwerten[1]) < dec($max_Wert2) Then
    ; Aktion
    EndIf
    EndIf
    Else
    ;weiter
    EndIf

    [/autoit]
  • Erst einmal Danke für die Antworten euch beiden :)

    Ich hab mich jetzt an dem Beispiel von Gummibär orientiert.
    Das Script ( in +++ eingesclossen) funz auch soweit.

    Wenn ich es aber in mein Hauptscript einbauen möchte, berechnet dieser den Hex2Dec2 nicht mehr. Das heißt, ich bekomme dann nur ne Null in der Msgbox ausgegeben. Als stand alone funz das Script aber!

    Die Hilfe sagt, 0 = Überlauf ?(

    [autoit]

    #include <Array.au3>

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

    HotKeySet ( "{F10}" , "start" )

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

    While 1
    Sleep(300)
    WEnd

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

    Func start()
    $Das = 1

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

    If $Das = 1 Then


    $Regex_mit_2_Hexwerten_Z1 = '-----Nachricht ID: 00000227 ID: \d...Time..\d*------\s'
    $Regex_mit_2_Hexwerten_Z2 = 'Argument: 0 DATA-TYPE: Integer DATA: \w*\s'
    $Regex_mit_2_Hexwerten_Z3 = 'Argument: 1 DATA-TYPE: Integer DATA: 6BF191EC\s'
    $Regex_mit_2_Hexwerten_Z4 = 'Argument: 2 DATA-TYPE: Integer DATA: 00000001\s'
    $Regex_mit_2_Hexwerten_Z5 = 'Argument: 3 DATA-TYPE: Array DATA: (43|44\w*).(44\w*\s)'
    $Regex_mit_2_Hexwerten = $Regex_mit_2_Hexwerten_Z1 & $Regex_mit_2_Hexwerten_Z2 & $Regex_mit_2_Hexwerten_Z3 & $Regex_mit_2_Hexwerten_Z4 & $Regex_mit_2_Hexwerten_Z5

    $file = FileOpen("C:\log.txt", 0)
    $chars = FileRead($file)
    $a_Regex_mit_2_Hexwerten = StringRegExp($chars,$Regex_mit_2_Hexwerten,2)
    FileClose($file)

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

    ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ; Alternativ zur Regex
    Dim $a_Regex_mit_2_Hexwerten[2]
    $a_Regex_mit_2_Hexwerten[0] = "44067C3F"
    $a_Regex_mit_2_Hexwerten[1] = "445AF53A"

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

    If IsArray($a_Regex_mit_2_Hexwerten) = True Then
    _ArrayDisplay($a_Regex_mit_2_Hexwerten)

    $Hex2Dec1 = Dec ($a_Regex_mit_2_Hexwerten[0])
    $Hex2Dec2 = Dec ($a_Regex_mit_2_Hexwerten[1])
    msgbox(1,"Hex2Dec1 = ",$Hex2Dec1)
    msgbox(1,"Hex2Dec2 = ",$Hex2Dec2)
    $min_Wert1 = 1136648136
    $max_Wert1 = 1143028898
    $min_Wert2 = 1145676384
    $max_Wert2 = 1147464919

    If $Hex2Dec1 > $min_Wert1 AND $Hex2Dec1 < $max_Wert1 Then
    msgbox(1,"Info","Wert1 Vergleich funz")
    IF $Hex2Dec2 > $min_Wert2 AND $Hex2Dec2 < $max_Wert2 Then
    msgbox(1,"Info","Wert2 Vergleich funz auch, Aktion1 wird jetztdurchgeführt!")
    ; Aktion1
    EndIf
    EndIf


    Else
    ; Ansonsten Aktion2 wird ausgeführt
    EndIf
    ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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

    EndIf

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

    EndFunc

    [/autoit]
  • Zitat von John

    Die Hilfe sagt, 0 = Überlauf


    die Hilfe sagt auch:

    Zitat von Hilfe

    Die Funktion funktioniert nur mit Zahlen die in einen 32-bit-Integer passen (-2147483648 bis 2147483647)

  • Hallo John,

    bist Du sicher, dass Du am Ende des zweiten Treffers ein Blank matchen willst?

    [autoit]

    $Regex_mit_2_Hexwerten_Z5 = 'Argument: 3 DATA-TYPE: Array DATA: (43|44\w*).(44\w*\s)'

    [/autoit]
  • Hallo Großvater,
    stimmt du hast Recht, diese blank \s war genau mein Fehler gewesen!

    vielen Dank, und jetzt komm ich endlich wieder weiter :thumbup: