2012-03-28 9 views
1

Nun, ich schreibe gerade ein Skript, das die Protokolle eines anderen Skriptes überprüfen soll ich schrieb, um zu sehen, ob es drei oder mehr erfolglose Pings in Folge vor einem erfolgreichen hatte, ist dies nur Barebones im Moment, aber es sollte so etwas wie dieseRegex und Datei lesen Zeile in Autohotley

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

jetzt die Datei suchen, die zu lesen versuchen, ist

success failure success 

und aus irgendeinem Grunde, wenn es die Datei liest, sagt es, dass die Variable % x% 'enthält ungültige Zeichen

  • wenn ich kopieren und den Inhalt ping.txt in das Skript einfügen und als Variable speichern funktioniert es
  • i vergewissert haben, dass die Datei Windows-Zeilenenden CR + LF
  • hat i zugewiesen haben somit wird die Variable in der Datei erzeugt lesen, wie eine andere Variable jedes nachlaufenden oder führenden Leerzeichen Stripping
  • die Datei in ANSI codiert und hat immer noch das Problem mit UTF8

Antwort

2

Funktionsparameter ohne das Symbol% ​​Variablennamen nehmen, einfach entferne t Saum.

Ich möchte auch darauf hinweisen, dass, wenn der zweite Parameter ein regulärer Ausdruck sein soll,
anstelle einer Variablen, die einen regulären Ausdruck enthält, benötigen Sie Anführungszeichen um ihn herum.
Wie Ihr Skript übergibt eine leere Zeichenfolge als das Muster, das immer 1
zurückgibt (Fehler wird als eine Variable mit einer leeren Zeichenfolge interpretiert.).
Lexikos zitieren:

„Eine leere Zeichenkette, wenn sie als RegexMuster kompiliert wird genau Null Zeichen übereinstimmen, was auch immer Position versuchen Sie es zu passen Denken Sie an es so aus:. Für jede Position n In einer beliebigen Zeichenfolge sind die nächsten 0 Zeichen immer gleich. "

Weil Sie einfach die Prüfung Wahrheit,
oder die Suche nach dem Index ich darauf hinweisen mag, dass Autohotkey einen nützlichen Kurzoperator für diese hat.

string := "this is a test" 

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

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

Diese Hotkeys machen das gleiche; der zweite verwendet den Kurz Operator ~=
und merkt, wie der TrayTip Parameter im zweiten Beispiel nur ein% hat

Wenn Sie einen Befehl Parameter mit einem% beginnen, die einen Ausdruck beginnt,
und innerhalb eines Ausdrucks Variablen sind nicht eingeschlossen mit%.

Der ternäre Operator ?: ist auch sehr nützlich:

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

Es könnte kompliziert aussehen, aber es ist sehr einfach.
Denken Sie an
% als ob
? als dann
: als sonst
Wenn (true), dann (a) andere (b)
% (true)? (a): (b)

Eine Variable wird als False ausgewertet, wenn ihr 0 (oder nichts) zugewiesen ist.
Aber in diesem Beispiel wird "\ sis" abgeglichen und der Index des Raums wird zurückgegeben (5),
, so dass es als True ausgewertet wird.

Sie können hier mehr über Variablen und Operatoren lesen:
http://l.autohotkey.net/docs/Variables.htm

+0

dank Mann, es perfekt – hamsolo474

+1

@ hamsolo474 Kein Problem gearbeitet. Ich habe meine Antwort mit einigen wichtigen Informationen aktualisiert, bitte sehen Sie nach. –

+1

also "var ~ = pattern" entspricht "regexmatch (var, pattern)"? das ist interessant, gibt es andere geheime Operatoren wie ~ = wenn ja, könntest du mich mit einer Liste von ihnen verbinden – hamsolo474

Verwandte Themen