AutoIt/Tablice
Zmienne typu tablicowego (tablice)
edytujTablica jest zmienną strukturalną, w której dane przechowywane są w osobnych komórkach. Dostęp do danych jest poprzez indeks (numer) komórki.
Tablice mogą być jedno lub wielowymiarowe. Poszczególne komórki mogą zawierać dane różnych typów (także inne tablice). Tablice przed użyciem muszą być zadeklarowane.
Dim $aTab_1[5] ;tablica jednowymiarowa, bez nadania wartości
Dim $aTab_2[4][5][6] ;tablica trójwymiarowa
Dim $aT[3]=[$tab_1,$tab_2,$tab_3] ;zadeklarowanie tablicy, której elementami są inne tablice
W nawiasach [ ] po nazwie podaje się ilość komórek w danym wymiarze.
Dostęp do tablicy przechowywanej w innej tablicy można uzyskać bezpośrednio, ale ta metoda jest nieco wolniejsza niż dostęp do innych typów danych:
Local $aInternal[3] = ["A", "B", "C"] ;zadeklarowanie tablicy
Local $aContainer[1] = [$aInternal] ;zadeklarowanie tablicy kontenera, zawierającego pierwszą tablicę
$sString = ($aContainer[0])[1] ;$sString zawiera "B", nazwa pierwszego elementu tablicy kontenera, musi być ujęta w nawiasy zwykłe ( )
Podczas deklarowania tablic możliwe jest jednoczesne nadanie wartości komórkom. Nie trzeba nadawać wartości wszystkim, można tylko początkowym.
Komórkom, którym nie nadamy wartości zostanie domyślnie przypisany pusty łańcuch znakowy.
Dim $aTab_3[3][2]=[["A",3],[1.9,False],[0,0]] ;tablica 2-wymiarowa, nadanie wartości komórkom
Dim $aTab2[5] = [13] ;tablica jednowymiarowa, komórce [0] nadano wartość 13, pozostałe ""
Dim $aTab3[2][3] = [["A"],["B",3]] ;nadanie wartości komórkom [0][0], [1][0] i [1][1], pozostałe ""
Jeżeli deklarujemy tablicę z jednoczesnym nadaniem wartości wszystkim komórkom, nie ma obowiązku podawania jej rozmiarów (AutoIt sam ustali te rozmiary):
Dim $aTab_3[][]=[["Ala",3],[1.9,False]]
lub:
Dim $aTab_3=[["Ala",3],[1.9,False]]
Aby odczytać lub zmienić zawartość komórki należy podać jej indeks, np.:
$a=$aTab_3[0][1] ;odczytanie wartości z komórki tablicy
$aTab_3[0][1]="As" ;nadanie wartości komórce
Można też utworzyć tablicę poprzez skopiowanie innej tablicy, np.:
Dim $aTab[3]=[”Ala”,”ma”,”kota”]
$aT=$aTab
UWAGA:
Indeksy tablic rozpoczynają się od zera.
Odwoływanie się do indeksów spoza zakresu spowoduje błąd.
Tablica może mieć max. 64 wymiary i łącznie ponad 16 milionów komórek.
Komórki tablic mogą zawierać wartości dowolnego typu, także inne tablice.
Używanie tablic z danymi różnego typu jest dopuszczalne, ale nie jest zalecane ze względu na zwiększoną czasochłonność operowania takimi tablicami.
Ponowne zadeklarowanie tablicy o tej samej nazwie spowoduje jej nadpisanie (wszystkie dane zostaną utracone), chyba że tablica była zadeklarowana jako statyczna.
Wtedy ponowna deklaracja działa jak ReDim.
Aby zmienić rozmiar tablicy bez utraty danych należy użyć ReDim.
Dim $aTab[3]=[1,2,3]
ReDim $aTab[4] ;$aTab[3]="" - pusty string
Elementom, które nie występowały w pierwotnej tablicy zostanie przypisany pusty łańcuch.
Jeżeli ilość elementów nowej tablicy będzie mniejsza to część danych zostanie utracona.
Dim $aTab[3]=[1,2,3]
ReDim $aTab[2]
Aby poznać wymiar istniejącej tablicy należy użyć Ubound, przykładowo:
Dim $aTab[4][5][6]
$a=Ubound($aTab,0) ;ilość wymiarów tablicy (3)
$b=Ubound($aTab) ;ilość komórek w wymiarze pierwszym (4)
$c=Ubound($aTab,1) ;j/w
$d=Ubound($aTab,2) ;ilość komórek w wymiarze drugim (5)
$e=Ubound($aTab,3) ;ilość komórek w wymiarze trzecim (6)
Zakres ważności zmiennych tablicowych
edytujZasady dotyczące zakresu ważności zmiennych tablicowych są identyczne jak dla zmiennych typu prostego, i zostały opisane w rozdziale AutoIt/Zmienne.
Puste tablice
edytujOd wersji 3.3.10.2 w AutoIt wprowadzono możliwość tworzenia pustych tablic. Są to takie tablice, które nie mają żadnej komórki.
Wbrew pozorom taki obiekt może być wygodny w użyciu, jeżeli w programie będziemy tworzyć tablice przez dołączanie kolejnych komórek (np. za pomocą funkcji _ArrayAdd).
Dzięki temu wszystkie komórki tablicy są traktowane jednakowo. W przeciwnym razie komórka o indeksie [0] tworzona byłaby inaczej niż pozostałe i trzeba by w skrypcie traktować ją w sposób specjalny.
Przykład:
Dim $aTab[0]
Anonimowe tablice
edytujOd wersji 3.3.10.2 w AutoIt wprowadzono możliwość korzystania z anonimowych tablic. Tablice anonimowe to takie tablice, które nie mają nazwy.
Może to być bardzo pomocne przy używaniu funkcji zwracających wynik w postaci tablicy, a nas interesuje tylko wartość jednej komórki.
Pokażmy to na przykładzie użycia opisanej w poprzednim rozdziale funkcji FileGetTime, która zwraca w postaci tablicy dane o czasie ostatniego użycia pliku.
Załóżmy, że interesuje nas tylko godzina utworzenia pliku. Do tej pory musiało to wyglądać tak:
$aT = FileGetTime(@WindowsDir & "\WindowsUpdate.log", 1)
MsgBox(0, "Godzina", $aT[3])
Teraz można to nieco uprościć, nie tworząc dodatkowej tablicy (odczytujemy wartość komórki anonimowej tablicy):
MsgBox(0, "Godzina", FileGetTime(@WindowsDir & "\WindowsUpdate.log", 1)[3])
Mechanizm ten działa także z funkcjami zdefiniowanymi przez użytkownika:
MsgBox(0,"", test()[2])
Func test()
Local $a=[1,2,3,4]
Return $a
EndFunc