在AutoHotKey中随机发送数组

时间:2015-08-21 19:51:13

标签: 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

2 个答案:

答案 0 :(得分:2)

Deceiving_Solicitite在技术上是正确的...但我不觉得他很好地解释了他的代码,坦率地说,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(),deprecated更改为Array.Push()。

答案 1 :(得分:0)

您忘记在星座符号中设置数组的名称 - > %A_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.arrays可以用作变量名称

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

报告我的代码是否适合您以及您是否理解。

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

为您的信息嵌入变量内的变量名称。 啊魔法