AutoIt/Tablice

Z Wikibooks, biblioteki wolnych podręczników.

Zmienne typu tablicowego (tablice)[edytuj]

Tablica 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[edytuj]

Zasady 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[edytuj]

Od 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[edytuj]

Od 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