StrSplit не примет `n в качестве разделителя - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь прочитать строки из 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(...), но затем, когда я go для использования looplength позже, он возвращает литерал "ArrayOfCommaSeperatedValues.Length ()" в виде строки.

Наконец, я прочитал документы и заметил, что технически вы должны использовать loop,parse, для повышения производительности, но для меня это скорее упражнение в понимании работы массивов, чем в сжатии производительности вне программы (я очень новичок в написании скриптов и / или языков программирования).

Я понимаю, что, вероятно, делаю что-то глупое, но я часами бился с этим, и у меня совершенно нет идей.

1 Ответ

0 голосов
/ 26 апреля 2020

Здесь довольно много ошибок, все они в значительной степени связаны с тем, что вы не знаете синтаксис.
Может быть, стоит попытаться сначала изучить синтаксис.

Итак, давайте начнем с первого line.
FileString=""
Вы используете устаревший способ присвоения текста переменной. Переменная FileString теперь содержит буквенный текст "".
. Чтобы исправить это, вы захотите избавиться от устаревшего синтаксиса и никогда не использовать его снова.
:= используется для присвоения результата выражения переменной. Выражение "", которое оценивается как ничто .

Вторая строка в порядке, я думаю. Тем не менее, я отказался бы от использования устаревшей команды и переключился бы на 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

"Учебное пособие для начинающих" также должно быть хорошо прочитано:
https://www.autohotkey.com/docs/Tutorial.htm

...