Tabeller

From Apache OpenOffice Wiki
< NO/Documentation/BASIC Guide
Revision as of 18:56, 14 December 2009 by Ketil3 (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Tabeller lar en samle likense ting under samme navn, for eksempel hundre kundenummer, der hvert er av typen Integer. De enkleste er en-dimensjonale med en kolonne og et visst antall rader. Vil en ha to tabeller med 100 rader deklareres de eksplisitt med

Dim kundenummer(99) as Integer
Dim kundenavn(99)
kundenummer(14) = 354
kundenavn(14) = "Jon Jonsen"

Av eksemplet ser en

  • uten datatype (som for kundenavn) blir datatypen variant (vil variere etter hvordan den brukes).
  • antallet plasser i tabellen indikeres innenfor parentesene: 0 er et "lower bound" og 99 er "upper bound", tilsammen 100 plasser.
  • hver plass i tabellen indekseres med sin posisjon: indeks 14 er den 15. plassen

Vil en ha andre yttergrenser (lower og upper bound) angis det innenfor parentesene:

Dim oppsummering(1940 To 1945) As String
Dim surhetsgrad(-10 To -5) As Double

Begge tabellene vil ha seks plasser indeksert som oppsummering(1940), oppsummering(1941) ... oppsummering(1945). Den andre indekseres som surhetsgrad(-10), surhetsgrad(-9) ... surhetsgrad(-5).

En spesiell form for tabell er UNO-sekvenser (lister, samlinger) som brukes innen Apache OpenOffice API. Disse starter alltid med 0. Mer om disse (viktige) tabellene senere.

Hvis nederste grense (lower bound) ikke oppgis, blir den 0. Noen mener at den skal starte med 1, og kan da gi direktivet

Option Base 1

Dette er en spesialitet arvet fra VBA og anbefales ikke, da de fleste språk starter med 0 som nederste grense. Og, det har forvirrende effekter, som at Dim a(3) gir en tabell med feltene a(1), a(2), a(3) og a(4)!

Flere dimensjoner

Skal en ha flere dimensjoner angis det innenfor parentesene i en implisitt deklarasjon, som:

Dim a(3, 5) As Integer
Dim c(7,14,99) As Boolean

som for tabell "a" gir 4 rader (indeksert 0 til 3) og 6 kolonner (indeksert 0 til 5), tilsammen 24 data av typen Integer. Tabell "c" har 8*15*100 boolske data = 1200 boolske data som opptar 1200*2 = 2400 byte i minnet.

Redimensjonering

Vil en endre plassen brukes ReDim. En ny tabell med tilstrekkelig plass, lages et annet sted i minnet, og (hvis en angir Preserve) blir det gamle innholdet kopiert dit (kan ta noe tid).

Dim a(7) as Integer
Dim skatt(200) as Double
...
ReDim a(10) As String          ' utvidelse (ny type, intet preserveres)
ReDim Preserve skatt(140)      ' forminsking (ikke alt kan preserveres)

Flerdimensjonale tabeller kan redimensjoneres likens. Vil en preservere, kan hverken antallet dimensjoner eller datatype forandres.

Yttergrensene

Funksjonene LBound(a) og UBound(a) viser yttergrensene i dimensjon a (eller dimensjon 0 hvis intet er angitt). For en tredimesjonal tabell (dimensjon 0, 1 og 2) blir dette

Dim MyArray(10, 13 to 28) As Integer
MsgBox(LBound(MyArray, 2))  ' viser 13
MsgBox(UBound(MyArray, 2))  ' viser 28

Tomme tabeller

Vet man ikke plassbehovet lages en tom tabell som senere utvides

Dim s() As String
... finner ut at en trenger 14 plasser
Redim s(13) As String

En tom tabell vil ha -1 som "upper bound" mens "lower bound" er 0.


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