Arrays 自动热键中随机发送数组

Arrays 自动热键中随机发送数组,arrays,autohotkey,Arrays,Autohotkey,我正在尝试创建一个AHK脚本,每当我键入“diss”时,它都会键入一个随机侮辱。然而,目前,我每次输入'diss'都会得到“Array[rand]” 我做错了什么 Array:= Object() Loop, Read, C:\Users\dell\Desktop\insults.txt { Array.Insert(A_LoopReadLine) } ::diss:: Random, rand, 0, 3 Send, Array[rand] Return 您忘记在前面的符号中设

我正在尝试创建一个AHK脚本,每当我键入“diss”时,它都会键入一个随机侮辱。然而,目前,我每次输入'diss'都会得到“Array[rand]”

我做错了什么

Array:= Object()

Loop, Read, C:\Users\dell\Desktop\insults.txt
{
    Array.Insert(A_LoopReadLine)
}


::diss::
Random, rand, 0, 3
Send, Array[rand]
Return

您忘记在前面的符号中设置数组的名称->
%A\u index%

fileread,contents,C:\Users\dell\Desktop\insults.txt

Loop, parse, contents, `n, `r
{
array%a_index% := A_LoopField

}

return


::diss::


Random, rand, 1, 3
tosend = array%rand%
tosend = % %tosend%
Send, %tosend%
Return
修正了很多事情

1.尝试读入变量

2.数组可以用作变量名

3.变量名称可以包含变量

如果我的代码对您有效,并且您理解它,请向我报告

/编辑我修复了代码并进行了测试

为供参考,我将变量的名称嵌套在变量中。
ahk魔术

欺骗律师在技术上是正确的。。。但我觉得他并没有很好地解释他的代码,坦率地说,Hisham的代码写得更好,即使它是错误的(只有2个小细节)。既然这么说了,让我们开始编码吧

我首先想到的是你的发送命令。让我们尝试将
Send,Array[rand]
更改为
Send%Array[rand]
,现在代码大部分时间都在工作

但这意味着什么

注意到%符号了吗?这是在命令上强制一个表达式,而该命令通常不会计算表达式。数组/对象在AHK中是这样处理的,命令不会识别它们

这仍然不能解释为什么代码只“在大多数情况下有效” 时间……”

事实证明,他生成的随机数也有一个小问题。当向数组中插入值时,它们从1开始递增索引,他的随机数有时会产生一个零。因此,我们现在将该行从
Random,rand,1,3更改为
,此时代码是固定的,并且在100%的时间内有效

但是如果他想受到比3次更多的侮辱呢?他必须通过吗 数一数每一行然后修改他的命令

这将是愚蠢的,因为我们可以让计算机为我们做这件事,因为它在计算文本行数方面比我们快得多。因此,我们只需让随机生成的结果介于1和数组的最大索引之间,如下所示:
Random,rand,1,%array.MaxIndex()
。注意到%了吗?我们再次强制命令求值和表达式。整洁,嗯

完成代码:

Array:= Object()

Loop, Read, C:\Users\dell\Desktop\insults.txt
{
    Array.Push(A_LoopReadLine)
}

::diss::
Random, rand, 1, % Array.MaxIndex()
Send % Array[rand]
Return
我希望你能从中吸取教训


编辑:将Array.Insert()更改为Array.Push()。

好的,所以我不理解您的代码。然而,在今天之前我从未使用过AHK,所以我将在不久的将来阅读所有这些内容。但是,您的代码对我不起作用-当我键入diss时,它什么也不打印,而不是我在文本文件中的三行中的一行…它对我起作用请确保您运行的是最新的版本。如果确实有效,我把txt文件搞砸了。谢谢。如果你使用最新的AHK,你的代码实际上是有效的。非常感谢。这对我帮助很大:)