2014-09-10 54 views
2
; Declare the window_title_array 
window_title_array%1% = 3270 Display A - A 
window_title_array%2% = 3270 Display A - B 
window_title_array%3% = 3270 Display A - C 
window_title_array%4% = 3270 Display A - D 
window_title_array%5% = 3270 Display A - E 
window_title_array%6% = 3270 Display A - F 

counter := 1 

my_string := window_title_array%counter% 

MsgBox, %my_string% 

如何使用計數器變量從數組中獲取字符串?我試圖做counter = 1counter := 1。他們兩人都無法訪問陣列。我不確定錯誤在哪裏。謝謝!AutoHotKey:如何訪問具有計數器變量的數組

PS:我的版本是很過時的 - 版本1.0.47.06

回答

2

我相信這是你如何創建你的數組。通過在數組索引周圍放置百分號,實際上是說您要使用第一個文件級輸入參數(在使用%1%的情況下)。這很可能是空白的,所以它最終尋找的是一個名爲「window_title_array」的變量。

取出百分數。你應該使用這個:

window_title_array1 = 3270 Display A - A 
window_title_array2 = 3270 Display A - B 
window_title_array3 = 3270 Display A - C 
window_title_array4 = 3270 Display A - D 
window_title_array5 = 3270 Display A - E 
window_title_array6 = 3270 Display A - F 

而不是這個:

window_title_array%1% = 3270 Display A - A 
window_title_array%2% = 3270 Display A - B 
window_title_array%3% = 3270 Display A - C 
window_title_array%4% = 3270 Display A - D 
window_title_array%5% = 3270 Display A - E 
window_title_array%6% = 3270 Display A - F 

,然後如果你要引用一些與計數器變量,...(看你的代碼)...你會完全像你一樣。請注意,這不是AHK的本地數組。但是如果你有一箇舊版本,你可能無法使用本地數組。這就是陣列在AHK中長時間完成的過程。

此外,我處理這個問題的另一種方法是創建一個「內置」計數器/長度變量,並使用它來動態編號我的數組。然後,可以很容易地在數組循環中引用等等。並且注意不需要手動編碼數組索引,這意味着您可以添加更多或插入它們而無需重新編號。我經常做結構的陣列,並且下面是一個簡單的例子...

myArr0 = 0 ; At the end, this will hold the count of the array 

myArr0++ 
myArr%myArr0%_firstName = John 
myArr%myArr0%_lastName = Smith 

myArr0++ 
myArr%myArr0%_firstName = Bill 
myArr%myArr0%_lastName = Jones 

myNames = 
; assemble a list of names, a simple example 
loop, %myArr0% 
{ 
myNames := myNames . myArr%a_index%_firstName . ", " 
} 

而且我用的是<數組名> 0語法計數器,因爲這是由stringsplit命令輸出相同的語法。

1

的問題是不是在counter變量,無論是你的版本將正常工作,但我建議你總是在AutoHotkey的只使用:=。您可以使用:=的表達式,並且如果您需要將文本分配給變量,則只需將""這樣的文本括起來,如a := "Some text here"。但要分配給變量表達式的結果不使用"",像這樣a:= 1+1。嘗試在AutoHotkey中不要使用=進行分配。
請在我的代碼和下面的註釋中查看註釋,以獲取解釋。這裏是工作代碼:

window_title_array := [] ; We create array here 

; we are adding items to array. 
window_title_array[1] := "3270 Display A - A" 
window_title_array[2] := "3270 Display A - B" 
window_title_array[3] := "3270 Display A - C" 
window_title_array[4] := "3270 Display A - D" 
window_title_array[5] := "3270 Display A - E" 
window_title_array[6] := "3270 Display A - F" 

counter := 1 

my_string := window_title_array[counter] ; here we need [] to indicate that we are using array cell and variable incide it does not needs to be enclosed in %% 

MsgBox, %my_string% 

在這裏,您可以得到更多關於Infor的陣列和AutoHotkey的http://ahkscript.org/docs/Objects.htm#Usage
請記住,在AutoHotkey的所有數組都是對象。
你也可以聲明數組並在一個字符串中添加值。更多關於在上面給你的鏈接。

此外,始終使用AutoHotkey及其http://ahkscript.org/(當前最新版本,新的官方網站)的文檔! autohotkey.com及其來自autohotkey.com的文檔已過時,您可能在使用它們時遇到一些問題!

+0

難道是因爲我有AHK的版本嗎?你提供的代碼不會打印窗口的標題... – George 2014-09-10 19:46:49

+0

@George我在我的代碼之前更新了答案,還請看它。 – vasili111 2014-09-10 19:48:56

+0

@George我已經檢查了codeI給你的,並且能夠正常工作,使用當前最新版本的AutoHotkey形式ahkscript.org。 – vasili111 2014-09-10 19:51:10