很高兴回到论坛!
因此,经过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个字文件,因此文件数组也可能是第一个关联数组的一部分,而不是两个不同的...不确定这里最好的方法是什么。
请帮我找到循环的正确结构和语法,如果可能的话,指向数组的正确方向。 (我知道我没有正确地联系他们)
我需要帮助形成关联数组......我查找的文档和示例不够全面。请尽量向正确的方向推进:oops:
我需要For Key命令的帮助。它应该通过它下面的循环,在每次迭代时提供下一个'langid'值,直到最后一个值(“zh-Hant”)。
一旦我有第2点工作,那么我将调整脚本以循环浏览6个文件,然后重复语言。我的目的是遍历每种语言的6个单词文件。一旦它工作,我将添加一个小的GUI提示,以启用整个循环或只是通过特定的语言。
Link to AHK_Forum post containing full code.
再次感谢!
答案 0 :(得分: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