2017-01-24 3 views
2

Я только начинаю с AHK, и я учу себя, как читать текстовый файл, состоящий из 4 столбцов, пробелов и табуляторов и неизвестного количества строк.Проблемы с возвратом элементов из массива

Я пытаюсь захватить первый токен любых строк, содержащих строку «xcal», сохранить этот первый токен (% A_Index% = 1, справа?) В моем массиве (RunNum), а затем извлечь все сохраненные номера, отображающие их в MsgBox.

#SingleInstance, Force 

RunNum := Object() ; Initialize temporary array 

; ----------------- Read LIST.TAB. --------------------------- 

IfNotExist, %A_ScriptDir%\LIST.TAB 
{ 
    MsgBox,48,Error!, LIST.TAB was not found. 
     ExitApp 
} 
else 
{ 
    RunCount = 1 ; Set Run counter 
    Loop, read, %A_ScriptDir%\list.tab ; Read config file 
    { 
     IfInString, A_LoopReadLine, xcal ; If current line contains the word 'xcal'... 
     { 
      Loop, Parse, A_LoopReadLine, %A_Space% %A_Tab% ; Parse through current line of config file, space and tab delimiter 
      { 
       if (%A_Index% = 1) ; Continue if at the first element/token of string 
       { 
       RunNum[RunCount] := A_LoopField ; Store current field in RunNum array 
       RunCount+=1 ; Increase counter   
       } 
      }    
     }           
    } 
MsgBox % RunNum[RunCount] 
} 
+1

право не является 'если A_Index = 1' не процентов знаки –

+1

Также самый внутренний 'if', кажется, отсутствует фигурные скобки вокруг двух следующих строк. – wOxxOm

+0

Удаление% 'ничего не меняет. И я должен забыть добавить фигурные скобки в цикле if, но они есть в моем подлинном скрипте. Я просто не понимаю, как я могу отображать значение в массиве, или если массив даже заполняется? – Glycoversi

ответ

1

Используя эти данные основаны на описании:

1234 xcal RandomJunk 
4567 Nocal RandomJunk 
8910 xcal RandomJunk 

Код:

#SingleInstance, Force 

RunNum := [] ; No reason to use Object() 

; ----------------- Read LIST.TAB. --------------------------- 
If !(FileExist(A_ScriptDir "\list.tab")) { 
    MsgBox,48,Error!, LIST.TAB was not found. 
     ExitApp 
} else { 
    Loop, read, %A_ScriptDir%\list.tab ; Read config file 
    { 
     If (InStr(A_LoopReadLine, "xcal")) ; If current line contains the word 'xcal'... 
      RunNum.push(StrSplit(A_LoopReadLine, A_Space A_tab).1)    
    } 

For Each, Value in RunNum 
    YourNumbers .= Value "`n" 
MsgBox % YourNumbers 
} 

Результаты:

1234 
8910 
+0

Так вот как! И это еще более упростило, спасибо Ahkcoder! – Glycoversi

+0

Без проблем, рад, что я мог бы помочь! Пожалуйста, прочитайте документацию (урок отличный) о командах/функциях, которые вы не понимаете, это все! Также практика, практика, практика! – errorseven

+0

Я не могу найти ссылку на «.1» на странице индекса функции «InStr». Это просто означает начало в первом элементе массива? – Glycoversi

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