Difference between revisions of "NL/Documentation/BASIC Guide/Arrays"
(→Empty arrays) |
m |
||
(6 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
|ShowPrevNext=block | |ShowPrevNext=block | ||
|ShowPrevPage=block | |ShowPrevPage=block | ||
− | |PrevPage= | + | |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 {{ | + | 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 | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Dim MyArray(3) | Dim MyArray(3) | ||
− | </ | + | </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: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Dim MyInteger(3) As Integer | Dim MyInteger(3) As Integer | ||
− | </ | + | </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: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Dim MyInteger(5 To 10) As Integer | Dim MyInteger(5 To 10) As Integer | ||
− | </ | + | </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: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Dim MyInteger(-10 To -5) As Integer | Dim MyInteger(-10 To -5) As Integer | ||
− | </ | + | </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: | ||
− | < | + | <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) | ||
− | </ | + | </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 | + | {{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: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Option Base 1 | Option Base 1 | ||
− | </ | + | </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 {{ | + | 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 | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Option Base 1 | Option Base 1 | ||
' ... | ' ... | ||
Dim MyInteger(3) | Dim MyInteger(3) | ||
− | </ | + | </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 {{ | + | {{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 {{ | + | 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 |
− | < | + | <syntaxhighlight lang="oobas"> |
Dim MyIntArray(5, 5) As Integer | Dim MyIntArray(5, 5) As Integer | ||
− | </ | + | </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 {{ | + | U kunt honderden dimensies definiëren in {{AOo}} BASIC arrays, de beschikbare hoeveelheid geheugen beperkt echter het aantal dimensies dat u kunt hebben. |
==Dynamische veranderingen in de dimensies van gegevensvelden== | ==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 {{ | + | 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: |
− | < | + | <syntaxhighlight lang="oobas"> |
ReDim MyArray(10) | ReDim MyArray(10) | ||
− | </ | + | </syntaxhighlight> |
− | {{Documentation/VBAnote|Anders dan in VBA, waar u u alleen dynamische arrays kunt dimensioneren met behulp van <tt>Dim MyArray()</tt>, laat {{ | + | {{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>.}} |
Het volgende voorbeeld wijzigt de dimensie van de initiële array zodat het 11 of 21 waarden kan opnemen: | Het volgende voorbeeld wijzigt de dimensie van de initiële array zodat het 11 of 21 waarden kan opnemen: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Dim MyArray(4) As Integer ' Declaratie met vijf elementen | Dim MyArray(4) As Integer ' Declaratie met vijf elementen | ||
' ... | ' ... | ||
Line 105: | Line 105: | ||
' ... | ' ... | ||
ReDim MyArray(20) As Integer ' Verhogen tot 21 elementen | ReDim MyArray(20) As Integer ' Verhogen tot 21 elementen | ||
− | </ | + | </syntaxhighlight> |
− | 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 | + | 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>: |
− | < | + | <syntaxhighlight lang="oobas"> |
Dim MyArray(10) As Integer ' Definiëren van de initiële | Dim MyArray(10) As Integer ' Definiëren van de initiële | ||
' dimensies | ' dimensies | ||
Line 116: | Line 116: | ||
' gegevensveld, terwijl | ' gegevensveld, terwijl | ||
' de inhoud wordt behouden | ' de inhoud wordt behouden | ||
− | </ | + | </syntaxhighlight> |
Als u <tt>Preserve</tt> gebruikt, zorg er dan voor dat het aantal dimensies en het type van variabelen hetzelfde blijven. | Als u <tt>Preserve</tt> gebruikt, zorg er dan voor dat het aantal dimensies en het type van variabelen hetzelfde blijven. | ||
− | {{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 {{ | + | {{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.}} |
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. | 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. | ||
Line 129: | Line 129: | ||
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. | 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. | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Dim MyArray(10) As Integer | Dim MyArray(10) As Integer | ||
' ... enkele instructies | ' ... enkele instructies | ||
Line 137: | Line 137: | ||
MsgBox(LBound(MyArray)) ' geeft weer : 0 | MsgBox(LBound(MyArray)) ' geeft weer : 0 | ||
MsgBox(UBound(MyArray)) ' geeft weer : 47 | MsgBox(UBound(MyArray)) ' geeft weer : 47 | ||
− | </ | + | </syntaxhighlight> |
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: | 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: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Dim MyArray(10, 13 to 28) As Integer | Dim MyArray(10, 13 to 28) As Integer | ||
MsgBox(LBound(MyArray, 2)) ' geeft weer : 13 | MsgBox(LBound(MyArray, 2)) ' geeft weer : 13 | ||
MsgBox(UBound(MyArray, 2)) ' geeft weer : 28 | MsgBox(UBound(MyArray, 2)) ' geeft weer : 28 | ||
− | </ | + | </syntaxhighlight> |
==Lege arrays== | ==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 | + | 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>: |
− | < | + | <syntaxhighlight lang="oobas"> |
Dim s() As String ' declareer een lege array | Dim s() As String ' declareer een lege array | ||
' --- later in het programma ... | ' --- later in het programma ... | ||
Redim s(13) As String | Redim s(13) As String | ||
− | </ | + | </syntaxhighlight> |
U kunt geen waarde toewijzen aan een lege array, omdat het geen elementen bevat. | U kunt geen waarde toewijzen aan een lege array, omdat het geen elementen bevat. | ||
Line 161: | Line 161: | ||
De "handtekening" van een lege array is dat <tt>UBound()</tt> -1 teruggeeft en <tt>LBound()</tt> geeft 0 terug: | De "handtekening" van een lege array is dat <tt>UBound()</tt> -1 teruggeeft en <tt>LBound()</tt> geeft 0 terug: | ||
− | < | + | <syntaxhighlight lang="oobas"> |
Dim MyArray() As Integer | Dim MyArray() As Integer | ||
MsgBox(LBound(MyArray)) ' geeft weer : 0 | MsgBox(LBound(MyArray)) ' geeft weer : 0 | ||
MsgBox(UBound(MyArray)) ' geeft weer : -1 | MsgBox(UBound(MyArray)) ' geeft weer : -1 | ||
− | </ | + | </syntaxhighlight> |
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. | 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. | ||
− | = | + | = Waarden definiëren voor arrays = |
− | + | Waarden voor de velden Array kunnen als volgt worden opgeslagen: | |
+ | <syntaxhighlight lang="oobas"> | ||
+ | MyArray(0) = "eenwaarde" | ||
+ | </syntaxhighlight> | ||
− | + | = Toegang tot arrays = | |
− | = | + | Toegang krijgen tot waarden in een array werkt als volgt: |
+ | <syntaxhighlight lang="oobas"> | ||
+ | MsgBox("Waarde:" & MyArray(0)) | ||
+ | </syntaxhighlight> | ||
− | + | = 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: | ||
+ | <syntaxhighlight lang="oobas"> | ||
Sub TestArrayAxess | Sub TestArrayAxess | ||
Dim MyArray(3) | Dim MyArray(3) | ||
MyArray(0) = "lala" | MyArray(0) = "lala" | ||
− | MsgBox(" | + | MsgBox("Waarde:" & MyArray(0)) |
End Sub | End Sub | ||
− | + | </syntaxhighlight> | |
Latest revision as of 14:35, 26 August 2022
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)
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).
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)
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.
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). |