1

次のように、8 つの数値をループし、負の値をスキップして最大値を返すスクリプトがあります。

biggest = 0
entry = 0
loop, 8
    {
    ; MsgBox %A_Index%
    if NegativeReadings%A_Index% not contains - ;filter out readings that are negative
        {
        ; MsgBox % AttributeReadings%A_Index%
        MsgBox %biggest%
        ; MsgBox % AttributeReadings%A_Index%
        if (AttributeReadings[A_Index] > biggest)
            {
            biggest := AttributeReadings[A_Index]
            entry = %A_Index%
            }
        }
    }
MsgBox %entry%

サンプル画像に 100,100,150,100,50,100,110,75 を入力すると、OCR はオブジェクト配列の結果を正しく返しますが、数値比較は失敗します

MsgBox %biggest% = 0,100,100,150 , 150,50,50,50 => %entry% = 8 を取得しています

間に何か問題が発生します (50 > 150) ahk でデータ型を扱う手がかりがほとんどありません。

4

1 に答える 1

0

わかりました、今夜のセカンドショットでそれを理解しました.OCRは末尾のスペースを含む文字列を返すため、管理者が言及したようにアルファベット順の比較につながりました.

正規表現でトリミングすると、問題なく動作するようになりました。これは、この同様の問題に遭遇する可能性のある人のためのコード スニペットです。

#SingleInstance force
#Include OCR.ahk

; sleep 5000
OCR()
; global
    {
    AttributeReadings := Object()
    loop, 8
        {
        NegativeReadings%A_Index% := GetOCR(730, (136 + (17 * (A_Index - 1))), 35, 17)
        AttributeReadings[A_Index] := GetOCR(730, (136 + (17 * (A_Index - 1))), 35, 17, "numeric")
        ; MsgBox % AttributeReadings%A_Index%
        }
    biggest = 0
    entry = 0
    i = 0
    loop, 8
        {
        ; MsgBox %A_Index%
        if NegativeReadings%A_Index% not contains - ;filter out readings that are negative
            {
            ; MsgBox % AttributeReadings%A_Index%
            ; length := StrLen(biggest)
            ; MsgBox %biggest%, %length%
            number := RegExReplace(AttributeReadings[A_Index], "([space])?", "")
            MsgBox %number%
            ; MsgBox % AttributeReadings%A_Index%
            if (number > biggest)
                {
                biggest := number
                entry := i
                }
            }
            i++
        }
    MsgBox %entry%
    }
End::
OCR()
return

上記のコードは基本的に、画像から数値のリストを読み取り、最初に最大の非負数を返します。ネガティブ フィルタリング部分に関しては、私のテスト ケースでは問題ないので OCR で行われます。作業している画像に応じて変更することをお勧めします。

于 2013-02-12T16:15:55.890 に答える