【问题标题】:AutoHotKey: How to access array with counter variableAutoHotKey:如何使用计数器变量访问数组
【发布时间】:2014-09-12 12:00:12
【问题描述】:
; 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

【问题讨论】:

    标签: autohotkey


    【解决方案1】:

    我相信这取决于您创建阵列的方式。通过在数组索引周围放置百分号,您实际上是在说要使用第一个文件级输入参数(在使用 %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 . ", "
    }
    

    我对计数器使用 0 语法,因为这与 stringssplit 命令输出的语法相同。

    【讨论】:

      【解决方案2】:

      问题不在counter 变量中,您的两个版本都可以正常工作,但我建议您始终在 AutoHotkey 中仅使用 :=。您可以将表达式与:= 一起使用,如果您需要将文本分配给变量,只需将文本用"" 括起来,就像a := "Some text here" 一样。但是要将表达式的结果分配给变量,不要使用"",例如a:= 1+1。尽量不要在 AutoHotkey 中使用 = 进行分配。
      查看我的代码中的 cmets 和我的代码下方的注释以进行解释。这是工作代码:

      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%
      

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

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

      【讨论】:

      • 是不是因为我的AHK版本?您提供的代码不会打印窗口的标题...
      • @George 我已经检查了我给你的代码,并且可以与当前最新版本的 AutoHotkey 表单 ahkscript.org 配合使用。
      • @George 它在消息框中打印3270 Display A - A
      • 不幸的是,我有一个非常旧的版本...版本 1.0.47.06。
      • @George 从这里下载新版本ahkscript.org/download/ahk-install.exe
      猜你喜欢
      • 2022-06-16
      • 2015-03-30
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      相关资源
      最近更新 更多