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 回答