Tömbök

From Apache OpenOffice Wiki
Jump to: navigation, search
Book.png


Az egyszerű (skaláris) változók mellett az Apache OpenOffice Basic támogatja a tömbök (adatmezők) használatát is. Egy adatmező számos változóból áll, amelyeket egy indexen keresztül lehet elérni.

Tömbök definiálása

Tömbök a következőképpen definiálhatók:

Egyszerű tömbök

A tömbdeklaráció hasonlít az egyszerű változók deklarációjához. Viszont a változódeklarációkkal ellentétben a tömbneveket zárójelek követik, amelyekben az elemek számára vonatkozó specifikáció található. A

Dim SajatTomb(3)

kifejezés deklarált egy tömböt, amely négy variant típusú változót tartalmaz: SajatTomb(0), SajatTomb(1), SajatTomb(2) és SajatTomb(3).

A tömbben típusspecifikus változókat is deklarálhatunk. Például a következő sor deklarál egy tömböt négy integer (egész szám) változóval:

Dim SajatEgesz(3) As Integer

Az előző példákban a tömbök indexe mindig a szabványos 0 értékkel kezdődik. Ha szükség van rá, megadhatunk egy tartományt is a kezdő és befejező érték megadásával a tömbdeklarációban. A következő példa létrehoz egy tömböt hat integer (egész szám) értékkel, amelyek az 5-től 10-ig terjedő indexszel érhetők el:

Dim SajatEgesz(5 To 10) As Integer

Az indexeknek nem kell pozitív értékeknek lenniük. A következő példa szintén egy helyes deklarációt mutat be, de negatív tömbhatárokkal:

Dim SajatEgesz(-10 To -5) As Integer

Deklarál egy tömböt hat integer (egész szám) értékkel, amelyek a -10-től -5-ig terjedő indexszel érhetők el

A tömbindex megadásánál három szabályt kell figyelembe venni:

  • A legkisebb használható index a -32768.
  • A legnagyobb használható index a 32767.
  • Az elemek maximális száma (egy tömbdimenzión belül) 16368.
Documentation note.png A VBA-ban néha egyéb tömbindex-határértékek is érvényesek lehetnek. Ugyanez vonatkozik a dimenziónkénti elemek számára is. Az érvényes értékek a megfelelő VBA-dokumentációban találhatók meg.

A kezdőindex értéke

A tömb kezdőindexének értéke általában 0. Ha szükséges, módosíthatjuk az összes tömbdeklaráció kezdőindexét a következő utasítással:

Option Base 1

Ezt az utasítást a modul fejlécében kell elhelyezni, ha azt akarjuk, hogy a modul összes tömbdeklarációjára vonatkozzon. Viszont ez nincs hatással az UNO-sorozatokra, amelyeket az Apache OpenOffice API definiál, és amelyek mindig a 0-s indexszel kezdődnek. Éppen ezért lehetőleg tartózkodjunk az Option Base 1 használatától.

Egy tömb elemeinek számát nem befolyásolja az Option Base 1 használata, csak a kezdőindex módosul. Az

Option Base 1
' ...
Dim SajatEgesz(3)

deklaráció létrehoz egy 4 integer (egész szám) változót, amelyek a következő kifejezésekkel írhatók le: SajatEgesz(1), SajatEgesz(2), SajatEgesz(3) és SajatEgesz(4).

Documentation note.png Az Apache OpenOffice Basic nyelvben az Option Base 1 kifejezés nem befolyásolja a tömb elemeinek számát, mint a VBA-ban. Az Apache OpenOffice Basic nyelvben ehelyett inkább a kezdőindex változik. Míg a SajatEgesz(3) három integer (egész szám) értéket hoz létre a VBA-ban, az 1-3 indexszel, addig ugyanaz a deklaráció az Apache OpenOffice Basic nyelvben négy integer (egész szám) értéket hoz létre, az 1-4 indexszel. Az Option Compatible utasítás hatására az Apache OpenOffice Basic a VBA-val megegyező módon működik.

Többdimenziós tömbök

Az egydimenziós tömbökön felül az Apache OpenOffice Basic támogatja a többdimenziós tömbök használatát. A dimenziókat vesszővel kell elválasztani. A

Dim SajatEgeszTomb(5, 5) As Integer

példa egy integer (egész szám) tömböt definiál két dimenzióval, mindegyiket 6 indexszel (amelyek a 0-5 indexszel érhetők el). Az egész tömb 6 x 6 = 36 integer (egész szám) értéket tartalmazhat.

Annak ellenére, hogy több száz dimenziót is definiálhatunk az Apache OpenOffice Basic-tömbökben, a dimenziók számát a rendelkezésre álló memória korlátozza.

A tömbdimenziók dinamikus módosítása

Az előző példákban a tömböknek egy adott méretük volt. Létrehozhatunk viszont olyan tömböket is, ahol a dimenziók dinamikusan módosulnak. Például definiálhatunk egy tömböt, amely egy adott szöveg A betűvel kezdődő szavait fogja tartalmazni. Mivel ez a szám előzetesen nem ismert, a tömb határait menet közben módosítanunk kell. Ehhez az Apache OpenOffice Basic a következő utasítást biztosítja:

ReDim SajatTomb(10)
Documentation note.png A VBA-val ellentétben, ahol a Dim SajatTomb() utasítással csak a dinamikus tömböket dimenzionálhatjuk, az Apache OpenOffice Basic nyelvben a statikus és a dinamikus tömböket is módosíthatjuk a ReDim utasítással.

A következő példa módosítja az eredeti tömbdimenziókat, így tömb 11 vagy 21 értéket tartalmazhat.

Dim SajatTomb(4) As Integer ' Deklaráció öt elemmel 
' ...
ReDim SajatTomb(10) As Integer ' Növelés 11 elemre
' ... 
ReDim SajatTomb(20) As Integer ' Növelés 21 elemre

Ha újra beállítjuk egy tömb dimenzióit, akkor bármelyiket használhatjuk az előző részekben ismertetett lehetőségek közül. Ez magában foglalja a többdimenziós tömbök deklarálását és a kezdő és befejező értékek megadását is. Ha a tömb dimenziói módosulnak, minden adata elveszik. Ha meg akarjuk tartani az eredeti értékeket, használjuk a Preserve parancsot.

Dim SajatTomb(10) As Integer ' A kezdeti dimenziók 
' definiálása
' ... 
ReDim Preserve SajatTomb(20) As Integer ' Dimenzió növelése 
' a tartalom megtartása
' mellett

Ha a Preserve parancsot használjuk, győződjünk meg róla, hogy a dimenziók száma és a változók típusa ugyanaz marad.

Documentation note.png A VBA-val ellentétben, ahol csak a tömb utolsó dimenziójának felső korlátja módosítható a Preserve paranccsal, az Apache OpenOffice Basic megengedi a többi dimenzió módosítását is.

Ha a ReDim parancsot a Preserve paranccsal együtt használjuk, ugyanazt az adattípust kell használnunk, amelyet az eredeti deklarációban.

Tömbök értékeinek definiálása

A tömbök értékei a következő módon tárolhatók:

SajatTomb(0) = "érték"

Tömbök elérése

A tömbök értékeinek elérése így oldható meg:

MsgBox("Érték:" & SajatTomb(0))

Példa tömb létrehozására, értékadásra és hozzáférésre

A példa bemutatja a valódi tömbkezelés minden lépését:

Sub TestArrayAxess
	Dim SajatTomb(3)
	SajatTomb(0) = "lala"
	MsgBox("Érték:" & SajatTomb(0))
End Sub


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools