AutoHotKey:如何使用计数器变量访问数组

时间:2014-09-10 18:44:20

标签: autohotkey

; Declare the window_title_array
window_title_array%1% = 3270 Display A - A
window_title_array%2% = 3270 Display A - B
window_title_array%3% = 3270 Display A - C
window_title_array%4% = 3270 Display A - D
window_title_array%5% = 3270 Display A - E
window_title_array%6% = 3270 Display A - F

counter := 1

my_string := window_title_array%counter%

MsgBox, %my_string%

如何使用计数器变量从数组中获取字符串?我尝试counter = 1counter := 1。他们都无法访问该阵列。我不确定错误在哪里。谢谢!

PS:我的版本已经过时了 - 版本1.0.47.06

2 个答案:

答案 0 :(得分:2)

我相信你是如何创建阵列的。通过在数组索引周围放置百分号,您实际上是在说您要使用第一个文件级输入参数(在使用%1%的情况下)。这很可能是空白的,所以它最终寻找的是一个名为" window_title_array"

的变量

取出百分数。你应该用这个:

window_title_array1 = 3270 Display A - A
window_title_array2 = 3270 Display A - B
window_title_array3 = 3270 Display A - C
window_title_array4 = 3270 Display A - D
window_title_array5 = 3270 Display A - E
window_title_array6 = 3270 Display A - F

而不是这个:

window_title_array%1% = 3270 Display A - A
window_title_array%2% = 3270 Display A - B
window_title_array%3% = 3270 Display A - C
window_title_array%4% = 3270 Display A - D
window_title_array%5% = 3270 Display A - E
window_title_array%6% = 3270 Display A - F

然后如果你想用计数器变量引用某些东西,......(查看你的代码)......你会像你一样完成它。

请注意,这不是AHK中的本机数组。但是如果您有旧版本,则可能无法使用本机阵列。这就是阵列在AHK中长时间完成的方式。

此外,我处理此问题的另一种方法是创建一个"内置"计数器/长度变量并使用它来动态编号我的数组。然后,这可以很容易地在数组循环等中引用。并注意没有数组索引的手动编码,这意味着您可以添加更多或插入它们而无需重新编号。我经常做结构数组,下面是一个简单的例子......

myArr0 = 0  ; At the end, this will hold the count of the array

myArr0++
myArr%myArr0%_firstName = John
myArr%myArr0%_lastName = Smith

myArr0++
myArr%myArr0%_firstName = Bill
myArr%myArr0%_lastName = Jones

myNames = 
; assemble a list of names, a simple example
loop, %myArr0%
{
myNames := myNames . myArr%a_index%_firstName . ", "
}

我对计数器使用< array name> 0语法,因为它与stringsplit命令输出的语法相同。

答案 1 :(得分:1)

问题不在counter变量中,您的两个版本都能正常运行,但我建议您始终只在AutoHotkey中使用:=。您可以将表达式与:=一起使用,如果您需要将文本分配给变量,则只需将""a := "Some text here"一起包含在文本中""。但要为变量分配表达式的结果,请不要使用a:= 1+1,例如=。尽量不要在AutoHotkey中使用window_title_array := [] ; We create array here ; we are adding items to array. window_title_array[1] := "3270 Display A - A" window_title_array[2] := "3270 Display A - B" window_title_array[3] := "3270 Display A - C" window_title_array[4] := "3270 Display A - D" window_title_array[5] := "3270 Display A - E" window_title_array[6] := "3270 Display A - F" counter := 1 my_string := window_title_array[counter] ; here we need [] to indicate that we are using array cell and variable incide it does not needs to be enclosed in %% MsgBox, %my_string% 进行分配。
查看我的代码中的注释和我的代码下面的注释以获得解释。这是工作代码:

{{1}}

在这里,您可以获得有关数组和AutoHotkey http://ahkscript.org/docs/Objects.htm#Usage的更多信息 请记住,AutoHotkey中的所有数组都是对象 你也可以声明数组并在一个字符串中添加值。更多关于它在上面给你的链接。

此外,始终使用来自http://ahkscript.org/的AutoHotkey及其文档(当前最新版本,新官方网站)! Autohotkey.com上的AutoHotkey及其文档已过时,使用它们可能会遇到一些问题!