我一直在想 - 在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中实现这一目标?
答案 0 :(得分:4)
我认为你要找的是循环和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]%
}
}