StrSplit 不会接受 `n 作为分隔符

StrSplit will not accept `n as a delimiter

我正在尝试从 CSV 中读取字符串,我想使用热字符串将其发送到其他应用程序。 我想将 CSV 的每一行用作数组中的字符串,所以我想我会使用换行符 (`n) 作为分隔符

目前我脚本的相关部分是:

FileString=""
FileRead, FileString, *t Constants.csv
ArrayOfCommaSeperatedValues:=StrSplit(FileString,`n, )
LoopLength = ArrayOfCommaSeperatedValues.Length()

但是,当我尝试 运行 它时,它给我一个错误

the following variable name contains an illegal character
"
"
the script was not reloaded;...

我试过用

替换 `n
"`n", %`n%, "%`n%", `r 

等等。它就是不接受它。

我也试过设置 ArrayOfCommaSeperatedValues = StrSplit(...) 但是当我稍后使用 looplength 时它 returns 文字 "ArrayOfCommaSeperatedValues.Length()" 作为一个字符串。

最后,我阅读了文档并注意到您在技术上应该使用 loop,parse, 来提高性能,但对我而言,这更多的是理解数组如何工作的练习,而不是挤压程序的性能(我对脚本 and/or 编程语言非常陌生)。

我意识到我可能在做一些愚蠢的事情,但几个小时以来我一直在为此苦苦思索,完全没有想法。

这里有不少错误,几乎都是你不懂语法。
最好先尝试学习语法。

所以,让我们从第一行开始。
FileString=""
您正在使用将文本分配给变量的传统方式。变量 FileString 现在包含文字文本 "".
要解决此问题,您需要摆脱旧语法并且永远不再使用它。
:= 用于将表达式的结果分配给变量。表达式为 "",计算结果为 nothing.

我猜第二行没问题。不过,我会放弃使用旧命令并切换到 FileOpen().
此外,在传递到该命令之前,实际上不需要定义变量 FileString 。那是多余的。

第三行,您现在正在使用正确的运算符来赋值。
所以这一行的错误是你使用的是表达式语法。不在旧语法中。
在更新更好的表达式语法中,您通过将字符串包装在 "" 中来指定一个字符串(或者在您的情况下,只是一个字符)。就像您在第一行尝试做的那样。
然后你有一个尾随的逗号。我不知道它应该是什么,但这只是一个直接的语法错误。
所以这是固定线路:
ArrayOfCommaSeperatedValues := StrSplit(FileString, "`n")

而在第四行中,您又输入了错误的运算符。您没有像在旧语法中那样将文字文本分配给变量。您正在分配表达式的结果。

这是全部修复的东西:

FileString := FileOpen("Constants.csv", "r `n").Read()
ArrayOfCommaSeperatedValues := StrSplit(FileString, "`n")
LoopLength := ArrayOfCommaSeperatedValues.Length()

或者,使用遗留 FileRead 命令:

FileString := "" ;this line is redundant
FileRead, FileString, *t Constants.csv
ArrayOfCommaSeperatedValues := StrSplit(FileString, "`n")
LoopLength := ArrayOfCommaSeperatedValues.Length()

需要注意的重要一点是,在遗留命令中我们使用的是遗留语法。字符串未环绕在 "".

这里有一个关于 AHK 脚本语言的很好的文档页面。还解释了遗留语法和表达式语法之间的区别。这也是您似乎也遇到过的问题之一。
https://www.autohotkey.com/docs/Language.htm

"beginner tutorial" 也应该是一个很好的阅读:
https://www.autohotkey.com/docs/Tutorial.htm