регулярное выражение и строка чтения файла в autohotley

хорошо, в настоящее время я пишу скрипт, который предназначен для проверки журналов другого скрипта, который я написал, чтобы увидеть, было ли у него три или более неудачных пинга подряд перед успешным, это просто голые кости на данный момент, но он должен выглядеть что-то нравится

fileread,x,C:\Users\Michael\Desktop\ping.txt
result:=RegExMatch(%x% ,failure success)
msgbox,,, The file is = %x% `n the result is  = %result%

теперь файл, который пытается прочитать,

success failure success

и почему-то при чтении файла пишет, что переменная %x% содержит недопустимые символы

  • когда я копирую и вставляю содержимое ping.txt в скрипт и сохраняю его как переменную, он работает
  • я убедился, что файл имеет окончание строки Windows CR + LF
  • я назначил переменную, сгенерированную в файле, прочитанной как другую переменную, таким образом удалив все конечные или начальные символы пробела
  • файл закодирован в ANSI и все еще имеет проблему с UTF8

person hamsolo474 - Reinstate Monica    schedule 28.03.2012    source источник


Ответы (1)


Параметры функций принимают имена переменных без символа %, просто удалите их.

Я также хочу отметить, что если второй параметр должен быть регулярным выражением,
вместо переменной, содержащей регулярное выражение, вам понадобятся кавычки вокруг него.
Поскольку ваш скрипт передает пустую строку как шаблон, который всегда будет возвращать 1
(отказ интерпретируется как переменная с пустой строкой, связанной с ней).
Процитируем Lexikos:

«Пустая строка, скомпилированная как шаблон регулярного выражения, будет соответствовать ровно нулю символов в любой позиции, которую вы пытаетесь сопоставить. Подумайте об этом так: для любой позиции n в любой строке следующие 0 символов всегда одинаковы».

Поскольку вы просто проверяете правду
или находите индекс, я хочу отметить, что Autohotkey имеет для этого полезный сокращенный оператор.

string := "this is a test"

f1::
result := RegExMatch(string, "\sis")
traytip,, %result%
Return

f2::
result := string ~= "\sis"
traytip,, % result
Return

Обе эти горячие клавиши делают одно и то же; во втором используется сокращенный оператор ~=
и обратите внимание, что параметр лотка во втором примере имеет только один %

Когда вы начинаете параметр команды с %, который запускает выражение,
и переменные внутри выражения не заключаются в %.

Тернарный оператор ?: также очень полезен:

string := "this is a test"
f3::traytip,, % (result := string ~= "\sis") ? (result) : ("nothing")

Это может показаться сложным, но на самом деле это очень просто.
Думайте о
% как будто
? как тогда
: как еще
Если (верно), то (а) иначе (б)
% (истинный) ? (а) : (б)

Переменная будет оцениваться как False, если ей присвоено значение 0 (или ничего).
Но в этом примере сопоставляется "\sis" и возвращается индекс пробела (5),
поэтому он оценивается как Истинно.

Подробнее о переменных и операторах можно прочитать здесь:
http://l.autohotkey.net/docs/Variables.htm

person Honest Abe    schedule 28.03.2012
comment
@hamsolo474 Нет проблем. Я обновил свой ответ важной информацией, пожалуйста, посмотрите. - person Honest Abe; 28.03.2012
comment
так что var ~= pattern эквивалентен регулярному выражению (var, pattern)? это интересно, есть ли другие секретные операторы, такие как ~=, если да, не могли бы вы дать мне ссылку на их список - person hamsolo474 - Reinstate Monica; 28.03.2012
comment
Я бы не хотел жить без тернарного оператора. Я обновил свой ответ, и вы также можете ознакомиться с примером в этом ответе для чрезвычайно полезного переключателя переменных. - person Honest Abe; 28.03.2012