2012-03-28 3 views
1

Ну, я в настоящее время пишу скрипт, который предназначен для проверки журналов другого скрипта, который я написал, чтобы увидеть, было ли у него три или более неудачных пинга подряд перед успешным, это просто скелетным на данный момент, но он должен выглядеть как этотregex и строка чтения файла в 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 в сценарий и сохранить его в переменной она работает
  • я убедился, что файл имеет окна строки окончаний CR + LF
  • я присвоенные переменная генерируется в файле читается как другая переменная, таким образом зачистки все конечные или ведущие пробельные символы
  • файл закодирован в ANSI и до сих пор имеет проблемы с UTF8

ответ

2

параметры функции взять имена переменных без символа%, просто удалить t рубчик.

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

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

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

string := "this is a test" 

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

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

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

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

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

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

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

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

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

+0

благодаря человеку она работала отлично – hamsolo474

+1

@ hamsolo474 Нет проблем. Я обновил свой ответ с некоторой важной информацией, пожалуйста, посмотрите. –

+1

так что «var ~ = pattern» эквивалентно «regexmatch (var, pattern)»? Интересно, существуют ли другие секретные операторы типа ~ = если бы вы могли связать меня со списком из них – hamsolo474

Смежные вопросы