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

From Apache OpenOffice Wiki
Jump to: navigation, search
(Multi-Dimensional Data Fields)
m
 
(9 intermediate revisions by the same user not shown)
Line 2: Line 2:
 
|ShowPrevNext=block
 
|ShowPrevNext=block
 
|ShowPrevPage=block
 
|ShowPrevPage=block
|PrevPage=Nl/Documentation/BASIC Guide/Date
+
|PrevPage=NL/Documentation/BASIC Guide/Date
 
|NextPage=NL/Documentation/BASIC Guide/Scope of Variables
 
|NextPage=NL/Documentation/BASIC Guide/Scope of Variables
 
|lang=block
 
|lang=block
Line 8: Line 8:
 
{{DISPLAYTITLE:Arrays (matrices)}}
 
{{DISPLAYTITLE:Arrays (matrices)}}
 
__NOTOC__  
 
__NOTOC__  
In aanvulling op eenvoudige variabelen (scalairen), ondersteunt {{OOo}} BASIC ook matrices (arrays/gegevensvelden). Een gegevensveld bevat verschillende variabelen, welke worden benaderd door middel van een index.
+
In aanvulling op eenvoudige variabelen (scalairen), ondersteunt {{AOo}} BASIC ook matrices (arrays/gegevensvelden). Een gegevensveld bevat verschillende variabelen, welke worden benaderd door middel van een index.
  
 
= Definiëren van arrays =
 
= Definiëren van arrays =
Line 17: Line 17:
 
Een declaratie voor een array komt overeen met die van een declaratie voor een eenvoudige variabele. Echter, anders dan bij de variabele declaratie, wordt de naam van de array gevolgd door haken die de specificaties bevatten voor het aantal elementen. De expressie
 
Een declaratie voor een array komt overeen met die van een declaratie voor een eenvoudige variabele. Echter, anders dan bij de variabele declaratie, wordt de naam van de array gevolgd door haken die de specificaties bevatten voor het aantal elementen. De expressie
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim MyArray(3)
 
Dim MyArray(3)
</source>
+
</syntaxhighlight>
  
 
declareert een array die vier variabelen heeft van het gegevenstype Variant, namelijk <tt>MyArray(0)</tt>, <tt>MyArray(1)</tt>, <tt>MyArray(2)</tt> en <tt>MyArray(3)</tt>.
 
declareert een array die vier variabelen heeft van het gegevenstype Variant, namelijk <tt>MyArray(0)</tt>, <tt>MyArray(1)</tt>, <tt>MyArray(2)</tt> en <tt>MyArray(3)</tt>.
Line 25: Line 25:
 
U kunt ook type-specifieke variabelen declareren in een array. De volgende regel declareert, bijvoorbeeld, een array met vier Integer-variabelen:  
 
U kunt ook type-specifieke variabelen declareren in een array. De volgende regel declareert, bijvoorbeeld, een array met vier Integer-variabelen:  
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim MyInteger(3) As Integer
 
Dim MyInteger(3) As Integer
</source>
+
</syntaxhighlight>
  
 
In het voorgaande voorbeeld begint de index voor de array altijd met de standaard startwaarde van nul. Als alternatief kan een geldigheidsbereik met start- en eindwaarden worden gespecificeerd voor de declaratie van het gegevensveld. Het volgende voorbeeld declareert een gegevensveld dat zes Integer-waarden heeft en kan worden benaderd met behulp van de indexnummers 5 tot en met 10:
 
In het voorgaande voorbeeld begint de index voor de array altijd met de standaard startwaarde van nul. Als alternatief kan een geldigheidsbereik met start- en eindwaarden worden gespecificeerd voor de declaratie van het gegevensveld. Het volgende voorbeeld declareert een gegevensveld dat zes Integer-waarden heeft en kan worden benaderd met behulp van de indexnummers 5 tot en met 10:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim MyInteger(5 To 10) As Integer
 
Dim MyInteger(5 To 10) As Integer
</source>
+
</syntaxhighlight>
  
 
De indexnummers behoeven geen positieve waarden te zijn. Het volgende voorbeeld toont ook een juiste declaratie, maar met negatieve grenzen voor het gegevensveld:
 
De indexnummers behoeven geen positieve waarden te zijn. Het volgende voorbeeld toont ook een juiste declaratie, maar met negatieve grenzen voor het gegevensveld:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim MyInteger(-10 To -5) As Integer
 
Dim MyInteger(-10 To -5) As Integer
</source>
+
</syntaxhighlight>
  
 
Het declareert een integer gegevensveld met 6 waarden die kunnen worden benaderd met behulp van de indexnummers -10 tot en met -5.
 
Het declareert een integer gegevensveld met 6 waarden die kunnen worden benaderd met behulp van de indexnummers -10 tot en met -5.
Line 45: Line 45:
 
Er zijn geen praktische grenzen aan de indexen of aan het aantal elementen in een array, zo lang als er voldoende geheugen is:
 
Er zijn geen praktische grenzen aan de indexen of aan het aantal elementen in een array, zo lang als er voldoende geheugen is:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim s(-53000 to 89000) As String
 
Dim s(-53000 to 89000) As String
 
s(-52000) = "aa"
 
s(-52000) = "aa"
 
s(79999) = "bb"
 
s(79999) = "bb"
 
print s(-52000), s(79999)
 
print s(-52000), s(79999)
</source>
+
</syntaxhighlight>
  
{{Documentation/VBAnote|Andere grenzen voor waarden zijn soms van toepassing op indexen voor gegevensvelden in VBA. Hetzelfde is ook van toepassing op het maximale aantal mogelijk elementen per dimensie. De geldige waarden daarvoor kunnen wordne gevonden in de relevante documentatie voor VBA.}}
+
{{Documentation/VBAnote|Andere grenzen voor waarden zijn soms van toepassing op indexen voor gegevensvelden in VBA. Hetzelfde is ook van toepassing op het maximale aantal mogelijk elementen per dimensie. De geldige waarden daarvoor kunnen worden gevonden in de relevante documentatie voor VBA.}}
  
 
==Gespecificeerde waarde voor begin van index==
 
==Gespecificeerde waarde voor begin van index==
Line 58: Line 58:
 
Het begin van de index van een gegevensveld begint normaal gesproken met de waarde 0. Als alternatief kunt u het begin van de index voor alle declaraties voor gegevensvelden  veranderen naar de waarde 1 met behulp van de aanroep:
 
Het begin van de index van een gegevensveld begint normaal gesproken met de waarde 0. Als alternatief kunt u het begin van de index voor alle declaraties voor gegevensvelden  veranderen naar de waarde 1 met behulp van de aanroep:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Option Base 1
 
Option Base 1
</source>
+
</syntaxhighlight>
  
De aanroep moet worden opgenomen in de kop van een module als u wilt dat het van toepassing is op alle declaraties voor gegevensvelden in de module. Echter, deze aanroep beïnvloedt niet de UNO-reeksen die werden gedefinieerd door middel van de {{OOo}} API waarvan de index altijd begint met 0. Om duidelijkheid te waarborgen, zou u gebruik van <tt>Option Base 1</tt> moeten vermijden.
+
De aanroep moet worden opgenomen in de kop van een module als u wilt dat het van toepassing is op alle declaraties voor gegevensvelden in de module. Echter, deze aanroep beïnvloedt niet de UNO-reeksen die werden gedefinieerd door middel van de {{AOo}} API waarvan de index altijd begint met 0. Om duidelijkheid te waarborgen, zou u gebruik van <tt>Option Base 1</tt> moeten vermijden.
 
Het aantal elementen in een bereik wordt niet beïnvloedt als u <tt>Option Base 1</tt> gebruikt, alleen het begin van de index verandert. De declaratie
 
Het aantal elementen in een bereik wordt niet beïnvloedt als u <tt>Option Base 1</tt> gebruikt, alleen het begin van de index verandert. De declaratie
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Option Base 1
 
Option Base 1
 
' ...
 
' ...
 
Dim MyInteger(3)
 
Dim MyInteger(3)
</source>
+
</syntaxhighlight>
  
 
creëert 4 integer-variabelen die kunnen worden beschreven met de expressies <tt>MyInteger(1)</tt>, <tt>MyInteger(2)</tt>, <tt>MyInteger(3)</tt> en <tt>MyInteger(4)</tt>.
 
creëert 4 integer-variabelen die kunnen worden beschreven met de expressies <tt>MyInteger(1)</tt>, <tt>MyInteger(2)</tt>, <tt>MyInteger(3)</tt> en <tt>MyInteger(4)</tt>.
  
{{Documentation/VBAnote|In {{OOo}} BASIC beïnvloedt de expressie <tt>Option Base 1</tt> niet het aantal elementen in een array zoals het dat doet in VBA. Het is, eigenlijk, het begin van de index die in {{OOo}} BASIC wordt verplaatst. Waar de  declaratie <tt>MyInteger(3)</tt> in VBA drie Integer-waarden creëert met de indexen 1 tot en met 3, creëert dezelfde declaratie in {{OOo}} BASIC vier Integer-waarden met de indexen 1 tot en met 4. Door <tt>Option Compatible</tt> te gebruiken gedraagt {{OOo}} BASIC zich als VBA.}}
+
{{Documentation/VBAnote|In {{AOo}} BASIC beïnvloedt de expressie <tt>Option Base 1</tt> niet het aantal elementen in een array zoals het dat doet in VBA. Het is, eigenlijk, het begin van de index die in {{AOo}} BASIC wordt verplaatst. Waar de  declaratie <tt>MyInteger(3)</tt> in VBA drie Integer-waarden creëert met de indexen 1 tot en met 3, creëert dezelfde declaratie in {{AOo}} BASIC vier Integer-waarden met de indexen 1 tot en met 4. Door <tt>Option Compatible</tt> te gebruiken gedraagt {{AOo}} BASIC zich als VBA.}}
  
 
==Multidimensionale gegevensvelden==
 
==Multidimensionale gegevensvelden==
  
In aanvulling op enkele dimensionale gegevensvelden, ondersteunt {{OOo}} BASIC ook het werken met multidimensionale gegevensvelden. De corresponderende dimensies worden van elkaar gescheiden door komma's. Het voorbeeld
+
In aanvulling op enkele dimensionale gegevensvelden, ondersteunt {{AOo}} BASIC ook het werken met multidimensionale gegevensvelden. De corresponderende dimensies worden van elkaar gescheiden door komma's. Het voorbeeld
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim MyIntArray(5, 5) As Integer
 
Dim MyIntArray(5, 5) As Integer
</source>
+
</syntaxhighlight>
  
 
definieert een integer bereik met twee dimensies, elk met 6 indexnummers (kunnen worden benaderd met de indexnummers 0 tot en met 5). De gehele array kan in totaal 6 × 6 = 36 Integer-waarden opnemen.
 
definieert een integer bereik met twee dimensies, elk met 6 indexnummers (kunnen worden benaderd met de indexnummers 0 tot en met 5). De gehele array kan in totaal 6 × 6 = 36 Integer-waarden opnemen.
  
U kunt honderden dimensies definiëren in {{OOo}} BASIC arrays, de beschikbare hoeveelheid geheugen beperkt echter het aantal dimensies dat u kunt hebben.
+
U kunt honderden dimensies definiëren in {{AOo}} BASIC arrays, de beschikbare hoeveelheid geheugen beperkt echter het aantal dimensies dat u kunt hebben.
  
==Dynamic Changes in the Dimensions of Data Fields==
+
==Dynamische veranderingen in de dimensies van gegevensvelden==
  
The previous examples are based on data fields of a specified dimension. You can also define arrays in which the dimension of the data fields dynamically changes. For example, you can define an array to contain all of the words in a text that begin with the letter A. As the number of these words is initially unknown, you need to be able to subsequently change the field limits. To do this in {{OOo}} Basic, use the following call:
+
De voorgaande voorbeelden zijn gebaseerd op gegevensvelden in een gespecificeerde dimensie. U kunt ook arrays definiëren waarbij de dimensie van de gegevensvelden dynamisch verandert. Bijvoorbeeld: u kunt een array definiëren om alle woorden in een tekst, die beginnen met de letter A, te bevatten. Als het aantal woorden bij aanvang onbekend is, moet u in staat zijn om de veldbegrenzingen overeenkomstig aan te passen. Gebruik, om dit in {{AOo}} BASIC te doen, de volgende aanroep:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
ReDim MyArray(10)
 
ReDim MyArray(10)
</source>
+
</syntaxhighlight>
  
{{Documentation/VBAnote|Unlike VBA, where you can only dimension dynamic arrays by using <tt>Dim MyArray()</tt>, {{OOo}} Basic lets you change both static and dynamic arrays using <tt>ReDim</tt>.}}
+
{{Documentation/VBAnote|Anders dan in VBA, waar u u alleen dynamische arrays kunt dimensioneren met behulp van <tt>Dim MyArray()</tt>, laat {{AOo}} BASIC u zowel statische als dynamische arrays wijzigen met behulp van <tt>ReDim</tt>.}}
  
The following example changes the dimension of the initial array so that it can record 11 or 21 values:
+
Het volgende voorbeeld wijzigt de dimensie van de initiële array zodat het 11 of 21 waarden kan opnemen:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
Dim MyArray(4) As Integer ' Declaration with five elements
+
Dim MyArray(4) As Integer ' Declaratie met vijf elementen
 
' ...
 
' ...
ReDim MyArray(10) As Integer ' Increase to 11 elements
+
ReDim MyArray(10) As Integer ' Verhogen tot to 11 elementen
 
' ...  
 
' ...  
ReDim MyArray(20) As Integer ' Increase to 21 elements
+
ReDim MyArray(20) As Integer ' Verhogen tot 21 elementen
</source>
+
</syntaxhighlight>
  
When you reset the dimensions of an array, you can use any of the options outlined in the previous sections. This includes declaring multi-dimensional data fields and specifying explicit start and end values. When the dimensions of the data field are changed, all contents are lost. If you want to keep the original values, use the <tt>Preserve</tt> command:
+
Als u de dimensies van een array opnieuw instelt, kunt u elk van de opties, weergegeven in de voorgaande gedeelten, gebruiken. Dit is inclusief het declareren van multidimensionale gegevensvelden en specificeren van expliciete begin- en eindwaarden. Als de dimensies van het gegevensveld worden veranderd, gaat alle inhoud verloren. Als u de oorspronkelijke waarden wilt behouden, gebruik dan de opdracht <tt>Preserve</tt>:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
Dim MyArray(10) As Integer ' Defining the initial
+
Dim MyArray(10) As Integer ' Definiëren van de initiële
' dimensions
+
' dimensies
 
' ...  
 
' ...  
ReDim Preserve MyArray(20) As Integer ' Increase in  
+
ReDim Preserve MyArray(20) As Integer ' Verhogen in  
' data field, while
+
' gegevensveld, terwijl
' retaining content
+
' de inhoud wordt behouden
</source>
+
</syntaxhighlight>
  
When you use <tt>Preserve</tt>, ensure that the number of dimensions and the type of variables remain the same.
+
Als u <tt>Preserve</tt> gebruikt, zorg er dan voor dat het aantal dimensies en het type van variabelen hetzelfde blijven.
  
{{Documentation/VBAnote|Unlike VBA, where only the upper limit of the last dimension of a data field can be changed through <tt>Preserve</tt>, {{OOo}} Basic lets you change other dimensions as well.}}
+
{{Documentation/VBAnote|Anders dan in VBA, waar alleen de bovengrens van de laatste dimensie van een gegevensveld kan worden gewijzigd door <tt>Preserve</tt>, laat {{AOo}} BASIC u ook andere dimensies wijzigen.}}
  
If you use <tt>ReDim</tt> with <tt>Preserve</tt>, you must use the same data type as specified in the original data field declaration.
+
Als u <tt>ReDim</tt> gebruikt met <tt>Preserve</tt>, moet u hetzelfde gegevenstype gebruiken als welke is gespecificeerd in de originele declaratie van het gegevensveld.
  
==Determining the Dimensions of Data Fields==
+
==Bepalen van de dimensies van gegevensvelden==
  
  
Functions <tt>LBound()</tt> and <tt>UBound()</tt> return respectively the lowest permitted index value and the highest permitted index value of an array. This is useful when an array has changed its dimensions.
+
De functies <tt>LBound()</tt> en <tt>UBound()</tt> geven respectievelijk de laagste toegestane waarde van de index en de hoogste toegestane waarde van de index van een array terug. Dit is handig als een array zijn dimensies heeft gewijzigd.
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim MyArray(10) As Integer
 
Dim MyArray(10) As Integer
' ... some instructions
+
' ... enkele instructies
 
Dim n As Integer
 
Dim n As Integer
n = 47 ' could be the result of a computation
+
n = 47 ' zou het resultaat van een berekening kunnen zijn
 
Redim MyArray(n) As Integer
 
Redim MyArray(n) As Integer
MsgBox(LBound(MyArray))  ' displays : 0
+
MsgBox(LBound(MyArray))  ' geeft weer : 0
MsgBox(UBound(MyArray))  ' displays : 47
+
MsgBox(UBound(MyArray))  ' geeft weer : 47  
</source>
+
</syntaxhighlight>
  
For a multi-dimensional array you need to specify the position (1 to n) of the index you want to know the permitted lower and upper values:
+
Voor een multidimensionale array dient u de positie (1 tot en met n) te specificeren van de index waarvan u de toegestane onderste en bovenste waarde wilt weten:
  
<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))  ' displays : 13
+
MsgBox(LBound(MyArray, 2))  ' geeft weer : 13
MsgBox(UBound(MyArray, 2))  ' displays : 28
+
MsgBox(UBound(MyArray, 2))  ' geeft weer : 28
</source>
+
</syntaxhighlight>
  
==Empty arrays==
+
==Lege arrays==
  
In some cases, especially when dealing with the API, you need to declare an empty array. Such array is declared without dimension, but may later be filled by an API function or with a <tt>Redim</tt> statement:
+
In sommige gevallen, speciaal wanneer met de API wordt gewerkt, moet u een lege array declareren. Een dergelijke array wordt gedeclareerd zonder dimensie, maar kan later worden gevuld door een API-functie of met een argument <tt>Redim</tt>:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
Dim s() As String ' declare an empty array
+
Dim s() As String ' declareer een lege array
' --- later in the program ...
+
' --- later in het programma ...
 
Redim s(13) As String
 
Redim s(13) As String
</source>
+
</syntaxhighlight>
  
You cannot assign a value to an empty array, since it does not contain any elements.
+
U kunt geen waarde toewijzen aan een lege array, omdat het geen elementen bevat.
  
The "signature" of an empty array is that <tt>UBound()</tt> returns -1 and <tt>LBound()</tt> returns 0:
+
De "handtekening" van een lege array is dat <tt>UBound()</tt> -1 teruggeeft en <tt>LBound()</tt> geeft 0 terug:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim MyArray() As Integer
 
Dim MyArray() As Integer
MsgBox(LBound(MyArray))  ' displays : 0
+
MsgBox(LBound(MyArray))  ' geeft weer : 0
MsgBox(UBound(MyArray))  ' displays : -1
+
MsgBox(UBound(MyArray))  ' geeft weer : -1
</source>
+
</syntaxhighlight>
  
Some API functions return an array containing elements (indexed from zero) or return an empty array. Use <tt>UBound()</tt> to check if the returned array is empty.
+
Sommige API-functies geven een array terug die elementen bevat (geïndexeerd vanaf nul) of geven ene lege array terug. Gebruik <tt>UBound()</tt> om te controleren of de teruggegeven array leeg is.
  
= Defining values for arrays =
+
= Waarden definiëren voor arrays =
  
Values for the Array fields can be stored like this:
+
Waarden voor de velden Array kunnen als volgt worden opgeslagen:
 +
<syntaxhighlight lang="oobas">
 +
MyArray(0) = "eenwaarde"
 +
</syntaxhighlight>
  
MyArray(0) = "somevalue"
+
= Toegang tot arrays =
  
= Accessing Arrays =
+
Toegang krijgen tot waarden in een array werkt als volgt:
 +
<syntaxhighlight lang="oobas">
 +
MsgBox("Waarde:" & MyArray(0))
 +
</syntaxhighlight>
  
Accessing values in an array works like this:
+
= Voorbeeld voor maken van een array, toewijzen van waarden en toegang =
 
+
MsgBox("Value:" & MyArray(0))
+
 
+
= Array Creation, value assignment and access example =
+
And example containing all steps that show real array usage:
+
  
 +
Een voorbeeld dat alle stappen bevat die het echte gebruik van een array weergeven:
 +
<syntaxhighlight lang="oobas">
 
  Sub TestArrayAxess
 
  Sub TestArrayAxess
 
  Dim MyArray(3)
 
  Dim MyArray(3)
 
  MyArray(0) = "lala"
 
  MyArray(0) = "lala"
  MsgBox("Value:" & MyArray(0))
+
  MsgBox("Waarde:" & MyArray(0))
 
  End Sub
 
  End Sub
 
+
</syntaxhighlight>
  
  

Latest revision as of 14:35, 26 August 2022

Book.png


In aanvulling op eenvoudige variabelen (scalairen), ondersteunt Apache OpenOffice BASIC ook matrices (arrays/gegevensvelden). Een gegevensveld bevat verschillende variabelen, welke worden benaderd door middel van een index.

Definiëren van arrays

Arrays kunnen als volgt worden gedefinieerd:

Eenvoudige arrays

Een declaratie voor een array komt overeen met die van een declaratie voor een eenvoudige variabele. Echter, anders dan bij de variabele declaratie, wordt de naam van de array gevolgd door haken die de specificaties bevatten voor het aantal elementen. De expressie

Dim MyArray(3)

declareert een array die vier variabelen heeft van het gegevenstype Variant, namelijk MyArray(0), MyArray(1), MyArray(2) en MyArray(3).

U kunt ook type-specifieke variabelen declareren in een array. De volgende regel declareert, bijvoorbeeld, een array met vier Integer-variabelen:

Dim MyInteger(3) As Integer

In het voorgaande voorbeeld begint de index voor de array altijd met de standaard startwaarde van nul. Als alternatief kan een geldigheidsbereik met start- en eindwaarden worden gespecificeerd voor de declaratie van het gegevensveld. Het volgende voorbeeld declareert een gegevensveld dat zes Integer-waarden heeft en kan worden benaderd met behulp van de indexnummers 5 tot en met 10:

Dim MyInteger(5 To 10) As Integer

De indexnummers behoeven geen positieve waarden te zijn. Het volgende voorbeeld toont ook een juiste declaratie, maar met negatieve grenzen voor het gegevensveld:

Dim MyInteger(-10 To -5) As Integer

Het declareert een integer gegevensveld met 6 waarden die kunnen worden benaderd met behulp van de indexnummers -10 tot en met -5.

Er zijn geen praktische grenzen aan de indexen of aan het aantal elementen in een array, zo lang als er voldoende geheugen is:

Dim s(-53000 to 89000) As String
s(-52000) = "aa"
s(79999) = "bb"
print s(-52000), s(79999)
Documentation note.png VBA : Andere grenzen voor waarden zijn soms van toepassing op indexen voor gegevensvelden in VBA. Hetzelfde is ook van toepassing op het maximale aantal mogelijk elementen per dimensie. De geldige waarden daarvoor kunnen worden gevonden in de relevante documentatie voor VBA.


Gespecificeerde waarde voor begin van index

Het begin van de index van een gegevensveld begint normaal gesproken met de waarde 0. Als alternatief kunt u het begin van de index voor alle declaraties voor gegevensvelden veranderen naar de waarde 1 met behulp van de aanroep:

Option Base 1

De aanroep moet worden opgenomen in de kop van een module als u wilt dat het van toepassing is op alle declaraties voor gegevensvelden in de module. Echter, deze aanroep beïnvloedt niet de UNO-reeksen die werden gedefinieerd door middel van de Apache OpenOffice API waarvan de index altijd begint met 0. Om duidelijkheid te waarborgen, zou u gebruik van Option Base 1 moeten vermijden. Het aantal elementen in een bereik wordt niet beïnvloedt als u Option Base 1 gebruikt, alleen het begin van de index verandert. De declaratie

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

creëert 4 integer-variabelen die kunnen worden beschreven met de expressies MyInteger(1), MyInteger(2), MyInteger(3) en MyInteger(4).

Documentation note.png VBA : In Apache OpenOffice BASIC beïnvloedt de expressie Option Base 1 niet het aantal elementen in een array zoals het dat doet in VBA. Het is, eigenlijk, het begin van de index die in Apache OpenOffice BASIC wordt verplaatst. Waar de declaratie MyInteger(3) in VBA drie Integer-waarden creëert met de indexen 1 tot en met 3, creëert dezelfde declaratie in Apache OpenOffice BASIC vier Integer-waarden met de indexen 1 tot en met 4. Door Option Compatible te gebruiken gedraagt Apache OpenOffice BASIC zich als VBA.


Multidimensionale gegevensvelden

In aanvulling op enkele dimensionale gegevensvelden, ondersteunt Apache OpenOffice BASIC ook het werken met multidimensionale gegevensvelden. De corresponderende dimensies worden van elkaar gescheiden door komma's. Het voorbeeld

Dim MyIntArray(5, 5) As Integer

definieert een integer bereik met twee dimensies, elk met 6 indexnummers (kunnen worden benaderd met de indexnummers 0 tot en met 5). De gehele array kan in totaal 6 × 6 = 36 Integer-waarden opnemen.

U kunt honderden dimensies definiëren in Apache OpenOffice BASIC arrays, de beschikbare hoeveelheid geheugen beperkt echter het aantal dimensies dat u kunt hebben.

Dynamische veranderingen in de dimensies van gegevensvelden

De voorgaande voorbeelden zijn gebaseerd op gegevensvelden in een gespecificeerde dimensie. U kunt ook arrays definiëren waarbij de dimensie van de gegevensvelden dynamisch verandert. Bijvoorbeeld: u kunt een array definiëren om alle woorden in een tekst, die beginnen met de letter A, te bevatten. Als het aantal woorden bij aanvang onbekend is, moet u in staat zijn om de veldbegrenzingen overeenkomstig aan te passen. Gebruik, om dit in Apache OpenOffice BASIC te doen, de volgende aanroep:

ReDim MyArray(10)
Documentation note.png VBA : Anders dan in VBA, waar u u alleen dynamische arrays kunt dimensioneren met behulp van Dim MyArray(), laat Apache OpenOffice BASIC u zowel statische als dynamische arrays wijzigen met behulp van ReDim.


Het volgende voorbeeld wijzigt de dimensie van de initiële array zodat het 11 of 21 waarden kan opnemen:

Dim MyArray(4) As Integer ' Declaratie met vijf elementen 
' ...
ReDim MyArray(10) As Integer ' Verhogen tot to 11 elementen
' ... 
ReDim MyArray(20) As Integer ' Verhogen tot 21 elementen

Als u de dimensies van een array opnieuw instelt, kunt u elk van de opties, weergegeven in de voorgaande gedeelten, gebruiken. Dit is inclusief het declareren van multidimensionale gegevensvelden en specificeren van expliciete begin- en eindwaarden. Als de dimensies van het gegevensveld worden veranderd, gaat alle inhoud verloren. Als u de oorspronkelijke waarden wilt behouden, gebruik dan de opdracht Preserve:

Dim MyArray(10) As Integer ' Definiëren van de initiële 
' dimensies
' ... 
ReDim Preserve MyArray(20) As Integer ' Verhogen in 
' gegevensveld, terwijl
' de inhoud wordt behouden

Als u Preserve gebruikt, zorg er dan voor dat het aantal dimensies en het type van variabelen hetzelfde blijven.

Documentation note.png VBA : Anders dan in VBA, waar alleen de bovengrens van de laatste dimensie van een gegevensveld kan worden gewijzigd door Preserve, laat Apache OpenOffice BASIC u ook andere dimensies wijzigen.


Als u ReDim gebruikt met Preserve, moet u hetzelfde gegevenstype gebruiken als welke is gespecificeerd in de originele declaratie van het gegevensveld.

Bepalen van de dimensies van gegevensvelden

De functies LBound() en UBound() geven respectievelijk de laagste toegestane waarde van de index en de hoogste toegestane waarde van de index van een array terug. Dit is handig als een array zijn dimensies heeft gewijzigd.

Dim MyArray(10) As Integer
' ... enkele instructies
Dim n As Integer
n = 47 ' zou het resultaat van een berekening kunnen zijn
Redim MyArray(n) As Integer
MsgBox(LBound(MyArray))  ' geeft weer : 0  
MsgBox(UBound(MyArray))  ' geeft weer : 47

Voor een multidimensionale array dient u de positie (1 tot en met n) te specificeren van de index waarvan u de toegestane onderste en bovenste waarde wilt weten:

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

Lege arrays

In sommige gevallen, speciaal wanneer met de API wordt gewerkt, moet u een lege array declareren. Een dergelijke array wordt gedeclareerd zonder dimensie, maar kan later worden gevuld door een API-functie of met een argument Redim:

Dim s() As String ' declareer een lege array
' --- later in het programma ...
Redim s(13) As String

U kunt geen waarde toewijzen aan een lege array, omdat het geen elementen bevat.

De "handtekening" van een lege array is dat UBound() -1 teruggeeft en LBound() geeft 0 terug:

Dim MyArray() As Integer
MsgBox(LBound(MyArray))  ' geeft weer : 0
MsgBox(UBound(MyArray))  ' geeft weer : -1

Sommige API-functies geven een array terug die elementen bevat (geïndexeerd vanaf nul) of geven ene lege array terug. Gebruik UBound() om te controleren of de teruggegeven array leeg is.

Waarden definiëren voor arrays

Waarden voor de velden Array kunnen als volgt worden opgeslagen:

 MyArray(0) = "eenwaarde"

Toegang tot arrays

Toegang krijgen tot waarden in een array werkt als volgt:

 MsgBox("Waarde:" & MyArray(0))

Voorbeeld voor maken van een array, toewijzen van waarden en toegang

Een voorbeeld dat alle stappen bevat die het echte gebruik van een array weergeven:

 Sub TestArrayAxess
 	Dim MyArray(3)
 	MyArray(0) = "lala"
 	MsgBox("Waarde:" & MyArray(0))
 End Sub


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