随机数组的AHK脚本

时间:2014-03-30 07:16:41

标签: autohotkey

脚本需要输出一个随机名称的文件:

Gui, Add, Edit, x25 y25 h150 w200 vSN, Enter names here
Gui, Add, Edit, x25 y185 h25 w200 vRT, Project Name
Gui, Add, Button, x25 y225 h25 w200, Generate
Gui, Show, x375 y200 h270 w250, Area Assignment by PS Cebu Team
FormatTime, TimeString,, MM d, yyyy
return
ButtonGenerate:
Gui, Submit, NoHide
{ 
  count := 1
  StringSplit, lines, SN, `n
  Loop, %lines0%
  {
    content := lines%a_index%
    FileAppend, Area %count% --- %content% `n, %RT% - %TimeString%.txt
    count++
  }
  return
  guiclose:
  exitapp
}

输出上的名称应该是随机的。

2 个答案:

答案 0 :(得分:2)

使用:

Sort, SN, Random

这会对你的字符串进行随机排序......之后,就是你应该拆分它。

随机排序数组并不容易,因为它具有键和值对 所以我们在将它转换为数组之前尝试将其随机化。

排序也默认为分隔新行。但是,如果要使用自定义分隔符,请使用D选项。喜欢:

# this will sort a string delimited by a comma
Sort, SN, Random D,

这是一个未经测试的代码(因为我不使用AHK),但它应该有效:

Gui, Add, Edit, x25 y25 h150 w200 vSN, Enter names here
Gui, Add, Edit, x25 y185 h25 w200 vRT, Project Name
Gui, Add, Button, x25 y225 h25 w200, Generate
Gui, Show, x375 y200 h270 w250, Area Assignment by PS Cebu Team
FormatTime, TimeString,, MM d, yyyy
return
ButtonGenerate:
Gui, Submit, NoHide
{ 
  count := 1
  # randomly sort the string delimited by `n first
  Sort, SN, Random
  # then convert it to the array
  StringSplit, lines, SN, `n
  Loop, %lines0%
  {
    content := lines%a_index%
    FileAppend, Area %count% --- %content% `n, %RT% - %TimeString%.txt
    count++
  }
  return
  guiclose:
  exitapp
}

答案 1 :(得分:2)

如果你是面向对象类型的程序员,你也可以使用AHK_L中的实际数组:

SN = James`nJohn`nRobert`nMichael

nameArr := StrSplit(SN, "`n")
ArrayShuffle(nameArr)
for i, name in nameArr
{
    FileAppend, Random name: %name%, somewhere.txt
}

; Fisher-Yates shuffle
ArrayShuffle(arr) {
    i := arr.MaxIndex()
    while(i > 1) {
        Random, rnd, 1, % i
        tmp := arr[rnd]
        arr[rnd] := arr[i]
        arr[i] := tmp
        i--
    }
    return arr
}

这样,您可以控制混洗算法,我使用了Fisher–Yates shuffle的实现。您还可以更进一步,并使用Arrays.ahk,可选择添加随机播放功能。

<强> P.S:
也许,您应该检查项目名称编辑内容的有效性,因为您直接将它们用作文件名。如果用户不小心输入了非法字符,您的程序就会崩溃。