Arrays AHK-StrSplit中的数组为空
脚本从.ini文件读取IDs。 每个ID之间用单个空格分隔,作为delimeter。 将ID拆分为一个子字符串数组后,该数组将变为空,尽管输出变量Recipients,fromIniRead不是空的 some.ini文件Arrays AHK-StrSplit中的数组为空,arrays,split,autohotkey,strsplit,Arrays,Split,Autohotkey,Strsplit,脚本从.ini文件读取IDs。 每个ID之间用单个空格分隔,作为delimeter。 将ID拆分为一个子字符串数组后,该数组将变为空,尽管输出变量Recipients,fromIniRead不是空的 some.ini文件 [IDs] SampleID1 SampleID2 SampleID3 #Persistent #SingleInstance, force SendMode, Input IniRead, Recipients, some.ini, IDs StringSplit, a
[IDs]
SampleID1 SampleID2 SampleID3
#Persistent
#SingleInstance, force
SendMode, Input
IniRead, Recipients, some.ini, IDs
StringSplit, aRecipients, Recipients, A_Space
; this code wouldn't work either
; aRecipients := StrSplit(Recipients, A_Space)
F1::
MsgBox % aRecipients[0]
Return
some.ahk文件
[IDs]
SampleID1 SampleID2 SampleID3
#Persistent
#SingleInstance, force
SendMode, Input
IniRead, Recipients, some.ini, IDs
StringSplit, aRecipients, Recipients, A_Space
; this code wouldn't work either
; aRecipients := StrSplit(Recipients, A_Space)
F1::
MsgBox % aRecipients[0]
Return
AHK版本:1.1.24.01
A_空间
必须由%%
包围:
StringSplit, aRecipients, Recipients, %A_Space%
结果数组不是实际对象,而是伪数组。第一个元素包含元素的数量,其余的是元素
语法形式为:arrayN
其中array
是变量的名称,N
是元素索引,可以是变量
因此,要在您的案例中打印它,调用应为:
string := "The array aRecipients has " . aRecipients0 . " elements:`n"
Loop, %aRecipients0%
{
string := string . aRecipients%A_Index% . "`n"
}
MsgBox %string%
如果可以的话,自动热键数组的第一个元素是[1]而不是[0]。因此:
MsgBox % aRecipients[1]
根据@2501,它是一个伪数组,而不是数组。因此,OP的原始代码是这样工作的:
MsgBox%aRecipients0
显示数字3(第0个元素是长度),而MsgBox%aRecipients1
显示第一个ID(SampleID1
)。命令StringSplit、OutputArray、InputVar[、分隔符、省略字符]之间存在差异
是@2501解释的,函数StrSplit(字符串[,分隔符,省略字符])
。虽然StringSplit
命令确实将“伪数组”返回到OutputArray
参数,但函数StrSplit()
返回数组,其中“第零”元素为false,长度为array.length()
。OP注释掉了他的StrSplit()
,并指出“这段代码也不起作用”。会的。