Difference between revisions of "NO/Documentation/BASIC Guide/Arrays"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Created page with '{{NO/Documentation/BASICGuideTOC/v2 |ShowPrevNext=block |ShowPrevPage=block |PrevPage=NO/Documentation/BASIC Guide/Date |NextPage=NO/Documentation/BASIC Guide/Scope of Variables …')
 
m
 
Line 12: Line 12:
 
et visst antall rader.  Vil en ha to tabeller med 100 rader deklareres de
 
et visst antall rader.  Vil en ha to tabeller med 100 rader deklareres de
 
eksplisitt med
 
eksplisitt med
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim kundenummer(99) as Integer
 
Dim kundenummer(99) as Integer
 
Dim kundenavn(99)
 
Dim kundenavn(99)
 
kundenummer(14) = 354
 
kundenummer(14) = 354
 
kundenavn(14) = "Jon Jonsen"
 
kundenavn(14) = "Jon Jonsen"
</source>
+
</syntaxhighlight>
 
Av eksemplet ser en
 
Av eksemplet ser en
 
*uten datatype (som for kundenavn) blir datatypen variant (vil variere etter hvordan den brukes).
 
*uten datatype (som for kundenavn) blir datatypen variant (vil variere etter hvordan den brukes).
Line 23: Line 23:
 
*hver plass i tabellen indekseres med sin posisjon:  indeks 14 er den 15. plassen
 
*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:
 
Vil en ha andre yttergrenser (lower og upper bound) angis det innenfor parentesene:
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim oppsummering(1940 To 1945) As String
 
Dim oppsummering(1940 To 1945) As String
 
Dim surhetsgrad(-10 To -5) As Double
 
Dim surhetsgrad(-10 To -5) As Double
</source>
+
</syntaxhighlight>
 
Begge tabellene vil ha seks plasser indeksert som
 
Begge tabellene vil ha seks plasser indeksert som
 
oppsummering(1940), oppsummering(1941) ... oppsummering(1945).
 
oppsummering(1940), oppsummering(1941) ... oppsummering(1945).
Line 37: Line 37:
 
Hvis nederste grense (lower bound) ikke oppgis, blir den 0.
 
Hvis nederste grense (lower bound) ikke oppgis, blir den 0.
 
Noen mener at den skal starte med 1, og kan da gi direktivet
 
Noen mener at den skal starte med 1, og kan da gi direktivet
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Option Base 1
 
Option Base 1
</source>
+
</syntaxhighlight>
 
Dette er en spesialitet arvet fra VBA og anbefales ikke,  
 
Dette er en spesialitet arvet fra VBA og anbefales ikke,  
 
da de fleste spr&aring;k starter med 0 som nederste grense.
 
da de fleste spr&aring;k starter med 0 som nederste grense.
Line 47: Line 47:
 
===Flere dimensjoner===
 
===Flere dimensjoner===
 
Skal en ha flere dimensjoner angis det innenfor parentesene i en implisitt deklarasjon, som:
 
Skal en ha flere dimensjoner angis det innenfor parentesene i en implisitt deklarasjon, som:
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim a(3, 5) As Integer
 
Dim a(3, 5) As Integer
 
Dim c(7,14,99) As Boolean
 
Dim c(7,14,99) As Boolean
</source>
+
</syntaxhighlight>
 
som for tabell "a" gir 4 rader (indeksert 0 til 3) og
 
som for tabell "a" gir 4 rader (indeksert 0 til 3) og
 
6 kolonner (indeksert 0 til 5), tilsammen 24 data av typen Integer.
 
6 kolonner (indeksert 0 til 5), tilsammen 24 data av typen Integer.
Line 60: Line 60:
 
lages et annet sted i minnet,
 
lages et annet sted i minnet,
 
og (hvis en angir Preserve) blir det gamle innholdet kopiert dit (kan ta noe tid).
 
og (hvis en angir Preserve) blir det gamle innholdet kopiert dit (kan ta noe tid).
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim a(7) as Integer
 
Dim a(7) as Integer
 
Dim skatt(200) as Double
 
Dim skatt(200) as Double
Line 66: Line 66:
 
ReDim a(10) As String          ' utvidelse (ny type, intet preserveres)
 
ReDim a(10) As String          ' utvidelse (ny type, intet preserveres)
 
ReDim Preserve skatt(140)      ' forminsking (ikke alt kan preserveres)
 
ReDim Preserve skatt(140)      ' forminsking (ikke alt kan preserveres)
</source>
+
</syntaxhighlight>
 
Flerdimensjonale tabeller kan redimensjoneres likens.
 
Flerdimensjonale tabeller kan redimensjoneres likens.
 
Vil en preservere, kan hverken antallet dimensjoner eller datatype forandres.
 
Vil en preservere, kan hverken antallet dimensjoner eller datatype forandres.
Line 73: Line 73:
 
Funksjonene LBound(a) og UBound(a) viser yttergrensene i dimensjon a (eller dimensjon 0 hvis
 
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
 
intet er angitt). For en tredimesjonal tabell (dimensjon 0, 1 og 2) blir dette
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim MyArray(10, 13 to 28) As Integer
 
Dim MyArray(10, 13 to 28) As Integer
 
MsgBox(LBound(MyArray, 2))  ' viser 13
 
MsgBox(LBound(MyArray, 2))  ' viser 13
 
MsgBox(UBound(MyArray, 2))  ' viser 28
 
MsgBox(UBound(MyArray, 2))  ' viser 28
</source>
+
</syntaxhighlight>
 
===Tomme tabeller===
 
===Tomme tabeller===
 
Vet man ikke plassbehovet lages en tom tabell som senere utvides
 
Vet man ikke plassbehovet lages en tom tabell som senere utvides
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim s() As String
 
Dim s() As String
 
... finner ut at en trenger 14 plasser
 
... finner ut at en trenger 14 plasser
 
Redim s(13) As String
 
Redim s(13) As String
</source>
+
</syntaxhighlight>
 
En tom tabell vil ha -1 som "upper bound" mens "lower bound" er 0.
 
En tom tabell vil ha -1 som "upper bound" mens "lower bound" er 0.
  
 
{{InterWiki Languages BasicGuide|articletitle=NO/Documentation/BASIC Guide/Arrays}}
 
{{InterWiki Languages BasicGuide|articletitle=NO/Documentation/BASIC Guide/Arrays}}
 
{{PDL1}}
 
{{PDL1}}

Latest revision as of 08:30, 9 June 2026


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