AutoHotKey:循环通过关联数组

问题描述 投票:2回答:1

很高兴回到论坛!

所以经过AHK文档,stackexchange和ahk_forum的广泛搜索,我决定寻求专家的帮助

我将解释我正在处理的代码,然后发布一些示例。

我编写了一个脚本,它可以提取6个不同单词文件的未翻译和未经验证的单词的值,并通过WebTranslateIt(站点)为23种不同的语言执行此操作。我已经设法通过处理代码块并在每个新查询之前将“fileid”变量设置为6个文件之一来使其工作,但是当我到达语言迭代部分时,我很快发现它会很多更有效(并且显着减少代码)只需在循环中循环一个循环迭代两个数组直到数组结束。

此脚本使用谷歌浏览器访问网站,然后继续将几个jQueries注入开发人员工具,并将结果提取到独立命名的变量(我想将其指定为关联数组的一部分)。

这是我遇到问题的部分......我可以通过以下方式成功遍历数组:

langid := ["bg", "cs", "da", "el", "eu", "fi", "hr" , "ja", "ko", "lt", "nb", 
"nl", "pl", "pt", "ro" , "ru", "sk", "sl", "sv", "th" , "tr", "zh", "zh-Hant"]

For Key, Value in langid
;   MsgBox, %A_Index% = %Value%    ; the MsgBox displays index values correctly but when putting my script in a loop start after the For Key part, it does not provide a value when sending the var inside a url. This works fine when I set the var manually before sending the URL.

但是当我在循环执行主查询的脚本之前尝试运行此权限时,我发送的用于更改语言的URL中的'langid'变量是空白的。

我想通过所有语言循环脚本23次。当脚本进入循环时,有一个部分以%langid%输入页面URL,我无法使用上述代码使用此部分。

除此之外,我还想为索引中的每个键分配更多值,如下所示:

langid := ["bg", "cs", "da", "el", "eu", "fi", "hr" , "ja", "ko", "lt", "nb", 
"nl", "pl", "pt", "ro" , "ru", "sk", "sl", "sv", "th" , "tr", "zh", "zh-Hant"]

lang := ["Bulgarian", "Czech", "Danish", "Greek", "Basque", "Finnish", 
"Hungarian", "Japanese", "Korean", "Lithuanian", "Norwegian", "Dutch", 
"Polish", "Portuguese", "Romanian", "Russian"]

'lang'数组应引用'langid'中的索引位置,因为我在一些显示字数进度的MsgBox中使用它作为描述性变量,在结尾处使用一个函数来写每个语言的6个文件的总结果。 (这纯粹是美学,但我很乐意让它在循环中工作)

我还需要与wordfiles非常相似的东西:

filenum := ["342553", "342582", "342411", "342367", "342467", "342502"]

wrdfile := ["OHFrontend", "OHFrontendListing", "HouseTypeAndSubType", "GuestType", "RoomTypeFeatureName", "RoomTypeFaturePrefixAndBracketOption"]

'wrdfile'数组也是纯粹美学的,因为我宁愿在总确认中显示文件名而不是filenum。然而,'filenum'很重要,需要遍历数组中的每个值一次,直到到达结尾,此时需要重新启动但是使用'lang'数组中的下一个语言。

我认为以下结构可行:

langid := [val1, val2, etc..]
lang := [val1, val2, etc..]
For Key, Value in langid     ; iterate through Languages
    Loop
    {
    filenum := [val1, val2, etc...]
    wrdfile := [val1, val2, etc...]
    Run Chrome
    Open Site
    For Key, Value in filenum    ;iterate through Wordfiles
        Loop
        {
        Send URL containing 'langid' var & 'filenum' var
        Open DevTools and send jQuery and store totals
        Confirm totals in MsgBox and save in txt file
        }
Return

值得注意的是,所有语言都需要迭代相同的6个字文件,因此文件数组也可能是第一个关联数组的一部分,而不是两个不同的...不确定这里最好的方法是什么。

请帮我找到循环的正确结构和语法,如果可能的话,指向数组的正确方向。 (我知道我没有正确地联系他们)

  1. 我需要帮助形成关联数组......我查找的文档和示例不够全面。请尽量向正确的方向推进:oops:
  2. 我需要For Key命令的帮助。它应该通过它下面的循环,在每次迭代时提供下一个'langid'值,直到最后一个值(“zh-Hant”)。
  3. 一旦我有第2点工作,那么我将调整脚本以循环浏览6个文件,然后重复语言。我的目的是遍历每种语言的6个单词文件。一旦它工作,我将添加一个小的GUI提示,以启用整个循环或只通过特定的语言。

Link to AHK_Forum post containing full code.

再次感谢!

autohotkey associative-array
1个回答
0
投票

您可以为语言和文件变量使用关联数组。关联数组的正确语法如下。

object := { "key1" : "value", "key2" : "value 2" }

您可以使用for循环迭代数组。

for key, value in object
    MsgBox key: %key% value: %value%

for循环已遍历您的对象,因此您不需要它下面的循环。如果我正确地理解你,你可以尝试这样的事情。

; Associative arrays
Langs := { "bg" : "Bulgarian", "cs" : "Czech" } 
Files := { "342553" : "OHFrontend", "342582" : "OHFrontendListing"}

; Open Chrome
For langId, langName in Langs
{
  For fileId, fileName in Files
  {
    url := "example.com/" . langId . "/" . fileId
    ; Send url with langId & fileId
    ; Open DevTools and send jQuery and store totals
    ; Confirm totals in MsgBox and save in txt file
    msgbox %url%
  }
}

Return
© www.soinside.com 2019 - 2024. All rights reserved.