【问题标题】:Handling loops in AHK script处理 AHK 脚本中的循环
【发布时间】:2014-07-29 03:49:14
【问题描述】:

我一直在想 - 在 ahk 脚本中处理循环的最佳方法是什么?

例如代替:

; Collect results 1
Sleep 1000
Addr1 := IE.document.getElementsByClassName("name")[0].innertext
String_Object := StrSplit(addr1, "`,")
If (Substr(Addr1, 1, 2) = "MK")
{
Addr1 := String_Object[2] . "," . Trim(String_Object[3]) . "," . PostCode
MsgBox, %Addr1%
}
Else
{
Addr1 := String_Object[1] . "," . Trim(String_Object[2]) . "," . PostCode
MsgBox, %Addr1%
}


; Collect results 2
Sleep 1000
Addr2 := IE.document.getElementsByClassName("name")[1].innertext
String_Object := StrSplit(addr2, "`,")
If (Substr(Addr2, 1, 2) = "MK")
{
Addr2 := String_Object[2] . "," . Trim(String_Object[3]) . "," . PostCode
MsgBox, %Addr2%
}
Else
{
Addr2 := String_Object[1] . "," . Trim(String_Object[2]) . "," . PostCode
MsgBox, %Addr2%
}

我想做这样的事情(注意这是伪代码):

j = 0
i = 1
while (i <= 5)
{
Sleep 1000
Addr[i] := IE.document.getElementsByClassName("name")[j].innertext
String_Object := StrSplit(addr[i], "`,")
If (Substr(Addr[i], 1, 2) = "MK")
{
Addr[i] := String_Object[2] . "," . Trim(String_Object[3]) . "," . PostCode
MsgBox, %Addr[i]%
}
Else
{
Addr[i] := String_Object[1] . "," . Trim(String_Object[2]) . "," . PostCode
MsgBox, %Addr[i]%
}

j = j+1
i = i+1
}

在 AHK 中是否有可能做到这一点?

【问题讨论】:

  • 请详细说明(用文字)您要达到的目标。那个伪代码并没有真正告诉我任何事情。顺便说一句:你应该真正研究你的变量命名风格。

标签: autohotkey


【解决方案1】:

我认为您正在寻找的是循环和 A_Index。

http://www.autohotkey.com/docs/commands/Loop.htm

http://www.autohotkey.com/docs/Variables.htm#Index

A_Index 自动跟踪它所在循环的当前循环迭代;它对其循环是唯一的,嵌套循环将跟踪它们自己的 A_Index。举个简单的例子,试试下面的代码:

Loop, 3
{
    MsgBox, Outer-loop %A_Index%
    Loop, 3
    {
        MsgBox, Inner-loop %A_Index%
    }
}

根据您的伪代码,您会得到以下效果:

Loop, 5
{
    Sleep 1000
    Addr[A_Index] := IE.document.getElementsByClassName("name")[A_Index - 1].innertext
    String_Object := StrSplit(addr[A_Index], "`,")
    If (Substr(Addr[A_Index], 1, 2) = "MK")
    {
        Addr[A_Index] := String_Object[2] . "," . Trim(String_Object[3]) . "," . PostCode
        MsgBox, %Addr[A_Index]%
    }
    Else
    {
        Addr[A_Index] := String_Object[1] . "," . Trim(String_Object[2]) . "," . PostCode
        MsgBox, %Addr[A_Index]%
    }
}

【讨论】:

  • 谢谢 我不知道 A_Index 自动变量,文档难以理解。 +1 先生!
猜你喜欢
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 2023-03-06
相关资源
最近更新 更多