2015-10-05 4 views
0

Я хотел бы получить функцию хвоста, чтобы захватить последнюю строку в файле журнала и превратить ее в число. Чтобы я мог использовать его в условии if.String to Number с использованием autohotkey

file = C:\Users\%A_UserName%\Documents\logTime.txt 
Tail(k,file) ; Return the last k lines of file 
{ 
    Loop Read, %file% 
    { 
     i := Mod(A_Index,k) 
     L%i% = %A_LoopReadLine% 
    } 
    L := L%i% 
    Loop % k-1 
    { 
     IfLess i,1, SetEnv i,%k% 
     i--  ; Mod does not work here 
      L := L%i% "`n" L } 
;Return L 
;msgbox % Tail(1,file) 
    } 

Условный условие

While (PrLoad > 5) ; Assign the Number you want. 
{ 
    If (Tail(1, file) = %A_Hour%%A_Min%) 
    { 
     msgBox is equal to Current Time %Tail(1, file)% 
     Sleep 60000 

    } 

Else if (Tail(1, file) > %A_Hour%%A_Min%) 
{ 
    msgBox Tail(1, file) is greater then %A_Hour%%A_Min% 
    Sleep 60000 
} 

Logfile делается следующим:

FileAppend, %A_Hour%%A_Min%`n, C:\Users\%A_UserName%\Documents\logTime.txt 

Я уверен, как IM, проходящих функцию неправильно в если состояние .. %L% как могу ли я превратить строку в число, которое будет сравниваться с помощью записей if?

ответ

0

Я надеюсь, что вы знаете о том, что Tail(1, file) > %A_Hour%%A_Min% может привести к неожиданным результатам.

Предположим, что% A_Hour %% A_Min% равно 1250, а хвост (1, файл) возвращает 0105.
01:05 может состояться после 12:50, но ваш скрипт не сможет этого увидеть.
Теперь вы можете продолжить и добавить к нему день, месяц и год, но это все равно не устранит все проблемы.

Именно поэтому большинство людей используют временные метки, которые просто представляют, сколько секунд прошло с 1970 года (или так).

... AHK может работать со строками, как если бы они были цифрами, поэтому никаких проблем с этим не должно быть.
Дайте это попробовать:

logFile = C:\Users\%A_UserName%\Documents\logTime.txt 

;create a new timestamp and add it to the log 
timestamp := GetUnixTimestamp() 
FileAppend, %timestamp% `n, %logFile% 

;wait a second 
Sleep, 1000 

;create another timestamp 
currentTimestamp := GetUnixTimestamp() 

;get old timestamp from log 
timestampFromLog := FileGetLastLine(logFile) 

MsgBox, %timestampFromLog% - Last timestamp from the log `n%currentTimestamp% - Current timestamp 

If (currentTimestamp > timestampFromLog) 
    MsgBox, Everything ran as expected! 

GetUnixTimestamp() { 
    T := A_NowUTC 
    T -= 1970,s 
    Return T 
} 

FileGetLastLine(file) { 
    Loop, Read, %file% 
     lineCount := A_Index 

    FileReadLine, lastLine, %file%, %lineCount% 
    Return lastLine 
} 
0

Вы используете последнюю версию AutoHotkey? Если нет, загрузите последнюю версию с autohotkey.com или ahkscript.org.

Из того, что я вижу, вы используете Pseudo Arrays, который является старым стилем.

Читайте о текущем состоянии объектов/Массивы здесь:

http://ahkscript.org/docs/Objects.htm http://ahkscript.org/docs/objects/Object.htm

Основной вопрос, который я вижу, это missuse из% 's вокруг переменных. Функции не нуждаются. Команды %% нуждаются в %%.

http://ahkscript.org/docs/Tutorial.htm#s5

+0

у вас есть дубликат в вашей ссылке. Надо идти. – EngrStudent