Difference between revisions of "NL/Documentation/BASIC Guide/Conversion Functions (Runtime Library)"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Checking the Content of Variables)
m
Line 1: Line 1:
{{DISPLAYTITLE:Functies voor conversie ({{OOo}} runtime-bibliotheek)}}
+
{{DISPLAYTITLE:Functies voor conversie ({{Documentation/AOO}} runtime-bibliotheek)}}
 +
 
 
{{NL/Documentation/BASICGuideTOC/v2
 
{{NL/Documentation/BASICGuideTOC/v2
 +
 
|ShowPrevNext=block
 
|ShowPrevNext=block
 +
 
|ShowPrevPage=block
 
|ShowPrevPage=block
 +
 
|PrevPage=NL/Documentation/BASIC Guide/Runtime Library
 
|PrevPage=NL/Documentation/BASIC Guide/Runtime Library
 +
 
|NextPage=NL/Documentation/BASIC Guide/Strings (Runtime Library)
 
|NextPage=NL/Documentation/BASIC Guide/Strings (Runtime Library)
 +
 
|runtime=block
 
|runtime=block
 +
 
}}
 
}}
+
 
In veel situaties ontstaan omstandigheden waaronder een variabele van het ene type moet worden gewijzigd naar een variabele van een ander type.  
+
In veel situaties ontstaan omstandigheden waaronder een variabele van het ene type moet worden gewijzigd naar een variabele van een ander type.
  
 
== Impliciete en expliciete conversies van typen ==
 
== Impliciete en expliciete conversies van typen ==
Line 15: Line 22:
  
 
<source lang="oobas">
 
<source lang="oobas">
 +
 
Dim A As String
 
Dim A As String
 +
 
Dim B As Integer
 
Dim B As Integer
  
B = 101  
+
B = 101
 +
 
 
A = B
 
A = B
 +
 
</source>
 
</source>
  
In dit voorbeeld is variabele <tt>A</tt> een string (tekenreeks) en variabele <tt>B</tt> is een integer (geheel getal). {{OOo}} BASIC zorgt er voor dat variabele <tt>B</tt> naar een string wordt geconverteerd gedurende de toewijzing aan variabele <tt>A</tt>. Deze conversie is veel omvattender dan het lijkt: de integer <tt>B</tt> blijft in het werkgeheugen in de vorm van een twee-byte lang getal. Aan de andere kant is <tt>A</tt> een string en de computer bewaart een één- of twee-byte lange waarde voor elk teken (elk getal). Daarom moet, vóórdat de inhoud van <tt>B</tt> naar <tt>A</tt> wordt gekopieerd, <tt>B</tt> worden geconverteerd naar de interne indeling van <tt>A</tt>.  
+
In dit voorbeeld is variabele <tt>A</tt> een string (tekenreeks) en variabele <tt>B</tt> is een integer (geheel getal). {{Documentation/AOO}} BASIC zorgt er voor dat variabele <tt>B</tt> naar een string wordt geconverteerd gedurende de toewijzing aan variabele <tt>A</tt>. Deze conversie is veel omvattender dan het lijkt: de integer <tt>B</tt> blijft in het werkgeheugen in de vorm van een twee-byte lang getal. Aan de andere kant is <tt>A</tt> een string en de computer bewaart een één- of twee-byte lange waarde voor elk teken (elk getal). Daarom moet, vóórdat de inhoud van <tt>B</tt> naar <tt>A</tt> wordt gekopieerd, <tt>B</tt> worden geconverteerd naar de interne indeling van <tt>A</tt>.
  
 
Anders dan in de meeste programmeertalen voert BASIC conversies van typen automatisch uit. Dit kan echter fatale consequenties hebben. Bij nadere beschouwing, blijkt de volgende reeks code
 
Anders dan in de meeste programmeertalen voert BASIC conversies van typen automatisch uit. Dit kan echter fatale consequenties hebben. Bij nadere beschouwing, blijkt de volgende reeks code
  
 
<source lang="oobas">
 
<source lang="oobas">
 +
 
Dim A As String
 
Dim A As String
 +
 
Dim B As Integer
 
Dim B As Integer
 +
 
Dim C As Integer
 
Dim C As Integer
  
B = 1  
+
B = 1
 +
 
 
C = 1
 
C = 1
 +
 
A = B + C
 
A = B + C
 +
 
</source>
 
</source>
  
 
die op het eerste gezicht recht toe recht aan lijkt te zijn, uiteindelijk een soort valstrik te zijn. De interpreter van BASIC berekent eerst het resultaat van het proces om op te tellen en converteert dat dan naar een string, die, als het resultaat ervan, de string 2 produceert.
 
die op het eerste gezicht recht toe recht aan lijkt te zijn, uiteindelijk een soort valstrik te zijn. De interpreter van BASIC berekent eerst het resultaat van het proces om op te tellen en converteert dat dan naar een string, die, als het resultaat ervan, de string 2 produceert.
  
Als, aan de andere kant, de interpreter van BASIC eerst de beginwaarden <tt>B</tt> en <tt>C</tt> naar een string converteert en de operator plus toepast op het resultaat, produceert het de string <tt>11</tt>.  
+
Als, aan de andere kant, de interpreter van BASIC eerst de beginwaarden <tt>B</tt> en <tt>C</tt> naar een string converteert en de operator plus toepast op het resultaat, produceert het de string <tt>11</tt>.
  
Hetzelfde is van toepassing bij het gebruiken van variabelen van het type Variant:  
+
Hetzelfde is van toepassing bij het gebruiken van variabelen van het type Variant:
  
 
<source lang="oobas">
 
<source lang="oobas">
Dim A
 
Dim B
 
Dim C
 
  
B = 1  
+
Dim A
 +
 
 +
Dim B
 +
 
 +
Dim C
 +
 
 +
B = 1
 +
 
 
C = "1"
 
C = "1"
 +
 
A = B + C
 
A = B + C
 +
 
</source>
 
</source>
  
Omdat variabelen van het type variant zowel getallen als tekenreeksen mogen bevatten, is het niet helder of de variabele <tt>A</tt> wordt toegewezen aan het getal 2 of de tekenreeks 11.  
+
Omdat variabelen van het type variant zowel getallen als tekenreeksen mogen bevatten, is het niet helder of de variabele <tt>A</tt> wordt toegewezen aan het getal 2 of de tekenreeks 11.
  
 
De opgemerkte bronnen voor fouten voor impliciete conversies voor typen kunnen alleen worden vermeden door zorgvuldig te programmeren; bijvoorbeeld door niet het gegevenstype Variant te gebruiken.
 
De opgemerkte bronnen voor fouten voor impliciete conversies voor typen kunnen alleen worden vermeden door zorgvuldig te programmeren; bijvoorbeeld door niet het gegevenstype Variant te gebruiken.
  
{{OOo}} BASIC biedt een scala aan functies voor conversie, die u kunt gebruiken om te definiëren wanneer het gegevenstype van een bewerking zou moeten worden geconverteerd, om andere fouten, die het resultaat zijn van impliciete conversies van typen, te vermijden:  
+
{{Documentation/AOO}} BASIC biedt een scala aan functies voor conversie, die u kunt gebruiken om te definiëren wanneer het gegevenstype van een bewerking zou moeten worden geconverteerd, om andere fouten, die het resultaat zijn van impliciete conversies van typen, te vermijden:
  
 
;<tt>CStr(Var)</tt>:converteert alle gegevenstypen naar een string (tekenreeks).
 
;<tt>CStr(Var)</tt>:converteert alle gegevenstypen naar een string (tekenreeks).
 +
 
;<tt>CInt(Var)</tt>:converteert alle gegevenstypen naar een waarde Integer (geheel getal).
 
;<tt>CInt(Var)</tt>:converteert alle gegevenstypen naar een waarde Integer (geheel getal).
 +
 
;<tt>CLng(Var)</tt>:converteert alle gegevenstypen naar een waarde Long.
 
;<tt>CLng(Var)</tt>:converteert alle gegevenstypen naar een waarde Long.
 +
 
;<tt>CSng(Var) </tt>:converteert alle gegevenstypen naar een waarde Single.
 
;<tt>CSng(Var) </tt>:converteert alle gegevenstypen naar een waarde Single.
 +
 
;<tt>CDbl(Var)</tt>:converteert alle gegevenstypen naar een waarde Double.
 
;<tt>CDbl(Var)</tt>:converteert alle gegevenstypen naar een waarde Double.
 +
 
;<tt>CBool(Var)</tt>:converteert alle gegevenstypen naar een waarde Boolean.
 
;<tt>CBool(Var)</tt>:converteert alle gegevenstypen naar een waarde Boolean.
 +
 
;<tt>CDate(Var)</tt>:converteert alle gegevenstypen naar een waarde Date.
 
;<tt>CDate(Var)</tt>:converteert alle gegevenstypen naar een waarde Date.
  
U kunt deze functies voor conversie gebruiken om te definiëren hoe {{OOo}} BASIC dit type bewerkingen voor conversie zou moeten uitvoeren:
+
U kunt deze functies voor conversie gebruiken om te definiëren hoe {{Documentation/AOO}} BASIC dit type bewerkingen voor conversie zou moeten uitvoeren:
  
 
<source lang="oobas">
 
<source lang="oobas">
 +
 
Dim A As String
 
Dim A As String
 +
 
Dim B As Integer
 
Dim B As Integer
 +
 
Dim C As Integer
 
Dim C As Integer
  
B = 1  
+
B = 1
 +
 
 
C = 1
 
C = 1
A = CStr(B + C)         ' B en C worden eerst bij elkaar opgeteld en dan
+
 
                        ' geconverteerd naar de string "2"
+
A = CStr(B + C) ' B en C worden eerst bij elkaar opgeteld en dan
A = CStr(B) + CStr(C)   ' B en C worden geconverteerd naar een String, en dan
+
 
                        ' gecombineerd om de string "11" te produceren
+
' geconverteerd naar de string "2"
 +
 
 +
A = CStr(B) + CStr(C) ' B en C worden geconverteerd naar een String, en dan
 +
 
 +
' gecombineerd om de string "11" te produceren
 +
 
 
</source>
 
</source>
  
Gedurende de eerste optelling in het voorbeeld telt {{OOo}} BASIC eerst de integer-variabelen bij elkaar op en converteert dan het resultaat naar een reeks tekens. <tt>A</tt> wordt toegewezen aan de string <tt>2</tt>. In tweede instantie worden de integer-variabelen eerst geconverteerd naar twee strings en dan aan elkaar gekoppeld door middel van de toewijzing. Aan <tt>A</tt> wordt daarom de string <tt>11</tt> toegewezen.
+
Gedurende de eerste optelling in het voorbeeld telt {{Documentation/AOO}} BASIC eerst de integer-variabelen bij elkaar op en converteert dan het resultaat naar een reeks tekens. <tt>A</tt> wordt toegewezen aan de string <tt>2</tt>. In tweede instantie worden de integer-variabelen eerst geconverteerd naar twee strings en dan aan elkaar gekoppeld door middel van de toewijzing. Aan <tt>A</tt> wordt daarom de string <tt>11</tt> toegewezen.
  
De numerieke functies voor conversie <tt>CSng</tt> en <tt>CDbl</tt> accepteren ook decimale getallen. Het symbool dat is gedefinieerd in de corresponderende land-specifieke instellingen moet wordne gebruikt als het teken voor de decimale punt. In tegenstelling daaraan gebruikt de methode <tt>CStr</tt> de huidige geselecteerde land-specifieke instellingen bij het opmaken van getallen en details voor datums en tijden.  
+
De numerieke functies voor conversie <tt>CSng</tt> en <tt>CDbl</tt> accepteren ook decimale getallen. Het symbool dat is gedefinieerd in de corresponderende land-specifieke instellingen moet wordne gebruikt als het teken voor de decimale punt. In tegenstelling daaraan gebruikt de methode <tt>CStr</tt> de huidige geselecteerde land-specifieke instellingen bij het opmaken van getallen en details voor datums en tijden.
  
 
De functie <tt>Val</tt> verschilt van de methoden <tt>Csng, Cdbl</tt> en <tt>Cstr</tt>. Het converteert een string naar een getal; het verwacht echter altijd dat een punt wordt gebruikt als symbool voor de decimale punt.
 
De functie <tt>Val</tt> verschilt van de methoden <tt>Csng, Cdbl</tt> en <tt>Cstr</tt>. Het converteert een string naar een getal; het verwacht echter altijd dat een punt wordt gebruikt als symbool voor de decimale punt.
  
 
<source lang="oobas">
 
<source lang="oobas">
 +
 
Dim A As String
 
Dim A As String
 +
 
Dim B As Double
 
Dim B As Double
  
 
A = "2.22"
 
A = "2.22"
B = Val(A)     ' Wordt correct geconverteerd, ongeacht de
+
 
                ' land-specifieke instellingen
+
B = Val(A) ' Wordt correct geconverteerd, ongeacht de
 +
 
 +
' land-specifieke instellingen
 +
 
 
</source>
 
</source>
  
 
== Controleren van de inhoud van variabelen ==
 
== Controleren van de inhoud van variabelen ==
  
In sommige gevallen kan de datum niet worden geconverteerd:  
+
In sommige gevallen kan de datum niet worden geconverteerd:
  
 
<source lang="oobas">
 
<source lang="oobas">
 +
 
Dim A As String
 
Dim A As String
 +
 
Dim B As Date
 
Dim B As Date
  
 
A = "test"
 
A = "test"
B = A           ' Veroorzaakt een foutbericht
+
 
 +
B = A ' Veroorzaakt een foutbericht
 +
 
 
</source>
 
</source>
  
Line 111: Line 158:
  
 
<source lang="oobas">
 
<source lang="oobas">
 +
 
Dim A As String
 
Dim A As String
 +
 
Dim B As Boolean
 
Dim B As Boolean
  
 
A = "test"
 
A = "test"
B = A           ' Veroorzaakt een foutbericht
+
 
 +
B = A ' Veroorzaakt een foutbericht
 +
 
 
</source>
 
</source>
  
Opnieuw rapporteert de interpreter van BASIC een fout.  
+
Opnieuw rapporteert de interpreter van BASIC een fout.
  
Deze foutberichten kunnen worden vermeden door het programma te controleren vóór een toewijzing, om vast te stellen of de inhoud van de variabele die moet worden toegewezen overeenkomt met het type variabele dat het doel is. {{OOo}} BASIC biedt de volgende functies om voor dit doel te testen:
+
Deze foutberichten kunnen worden vermeden door het programma te controleren vóór een toewijzing, om vast te stellen of de inhoud van de variabele die moet worden toegewezen overeenkomt met het type variabele dat het doel is. {{Documentation/AOO}} BASIC biedt de volgende functies om voor dit doel te testen:
 +
 
 +
;<tt>IsNumeric(Waarde)</tt>:controleert of een waarde een getal is.
  
;<tt>IsNumeric(Waarde)</tt>:controleert of een waarde een getal is.
 
 
;<tt>IsDate(Waarde)</tt>:controleert of een waarde een datum is.
 
;<tt>IsDate(Waarde)</tt>:controleert of een waarde een datum is.
 +
 
;<tt>IsArray(Waarde)</tt>:controleert of een waarde een array is.
 
;<tt>IsArray(Waarde)</tt>:controleert of een waarde een array is.
  
Line 129: Line 182:
  
 
<source lang="oobas">
 
<source lang="oobas">
 +
 
If IsNumeric(InvoerGebruiker) Then
 
If IsNumeric(InvoerGebruiker) Then
  GeldigeInvoer = InvoerGebruiker
+
 
 +
GeldigeInvoer = InvoerGebruiker
 +
 
 
Else
 
Else
  GeldigeInvoer = 0
+
 
  MsgBox "Foutbericht."
+
GeldigeInvoer = 0
 +
 
 +
MsgBox "Foutbericht."
 +
 
 
End If
 
End If
 +
 
</source>
 
</source>
  
 
In het voorgaande voorbeeld wordt, als de variabele <tt>InvoerGebruiker</tt> een geldige numerieke waarde bevat, deze toegewezen aan de variabele <tt>GeldigeInvoer</tt>. Als <tt>InvoerGebruiker</tt> geen geldig getal bevat wordt aan <tt>GeldigeInvoer</tt> de waarde <tt>0</tt> toegewezen en wordt een foutbericht weergegeven.
 
In het voorgaande voorbeeld wordt, als de variabele <tt>InvoerGebruiker</tt> een geldige numerieke waarde bevat, deze toegewezen aan de variabele <tt>GeldigeInvoer</tt>. Als <tt>InvoerGebruiker</tt> geen geldig getal bevat wordt aan <tt>GeldigeInvoer</tt> de waarde <tt>0</tt> toegewezen en wordt een foutbericht weergegeven.
  
Waar functies voor het testen voor het controleren van getallen, details voor datums en arrays in {{OOo}} BASIC wel bestaan, bestaat er geen overeenkomstige functie voor het controleren van Booleaanse waarden. De functionaliteit kan echter worden geïmiteerd door de functie <tt>IsBoolean</tt> te gebruiken:  
+
Waar functies voor het testen voor het controleren van getallen, details voor datums en arrays in {{Documentation/AOO}} BASIC wel bestaan, bestaat er geen overeenkomstige functie voor het controleren van Booleaanse waarden. De functionaliteit kan echter worden geïmiteerd door de functie <tt>IsBoolean</tt> te gebruiken:
  
 
<source lang="oobas">
 
<source lang="oobas">
 +
 
Function IsBoolean(Waarde As Variant) As Boolean
 
Function IsBoolean(Waarde As Variant) As Boolean
  On Error Goto ErrorIsBoolean:
 
  Dim Dummy As Boolean
 
  Dummy = Waarde
 
  IsBoolean = True
 
  On Error Goto 0
 
  Exit Sub
 
  
  ErrorIsBoolean:
+
On Error Goto ErrorIsBoolean:
  IsBoolean = False
+
 
  On Error Goto 0
+
Dim Dummy As Boolean
 +
 
 +
Dummy = Waarde
 +
 
 +
IsBoolean = True
 +
 
 +
On Error Goto 0
 +
 
 +
Exit Sub
 +
 
 +
ErrorIsBoolean:
 +
 
 +
IsBoolean = False
 +
 
 +
On Error Goto 0
 +
 
 
End Function
 
End Function
 +
 
</source>
 
</source>
  
De functie <tt>IsBoolean</tt> definieert een interne hulpvariabele <tt>Dummy</tt> van het type Boolean en probeert die toe te wijzen aan de getransfereerde waarde. Als de toewijzing succesvol verloopt geeft de functie <tt>True</tt> terug. Als hij faalt wordt een runtime-fout geproduceerd, de foutafhandeling onderschept de fout en de functie geeft <tt>False</tt> terug.
+
De functie <tt>IsBoolean</tt> definieert een interne hulpvariabele <tt>Dummy</tt> van het type Boolean en probeert die toe te wijzen aan de getransfereerde waarde. Als de toewijzing succesvol verloopt geeft de functie <tt>True</tt> terug. Als hij faalt wordt een runtime-fout geproduceerd, de foutafhandeling onderschept de fout en de functie geeft <tt>False</tt> terug.
  
{{Documentation/VBAnote|Als een string in {{OOo}} BASIC een niet-numerieke waarde bevat en indien die wordt toegewezen aan een getal, produceert {{OOo}} BASIC geen foutbericht, maar stopt met het converteren van de string bij het eerste ongeldige teken. Deze procedure verschilt van VBA. Daar wordt een fout geactiveerd en wordt de implementatie van het programma beëindigd als een overeenkomstige toewijzing wordt uitgevoerd.}}
+
{{Documentation/VBAnote|Als een string in {{Documentation/AOO}} BASIC een niet-numerieke waarde bevat en indien die wordt toegewezen aan een getal, produceert {{Documentation/AOO}} BASIC geen foutbericht, maar stopt met het converteren van de string bij het eerste ongeldige teken. Deze procedure verschilt van VBA. Daar wordt een fout geactiveerd en wordt de implementatie van het programma beëindigd als een overeenkomstige toewijzing wordt uitgevoerd.}}
  
 
 
{{InterWiki Languages BasicGuide|articletitle=Documentation/BASIC Guide/Conversion Functions (Runtime Library)}}
 
{{InterWiki Languages BasicGuide|articletitle=Documentation/BASIC Guide/Conversion Functions (Runtime Library)}}
 +
 
{{PDL1}}
 
{{PDL1}}

Revision as of 16:42, 12 February 2014


Book.png

In veel situaties ontstaan omstandigheden waaronder een variabele van het ene type moet worden gewijzigd naar een variabele van een ander type.

Impliciete en expliciete conversies van typen

De eenvoudigste manier om een variabele te wijzigen van het ene type naar een ander is om een toewijzing te gebruiken.

Dim A As String
 
Dim B As Integer
 
B = 101
 
A = B

In dit voorbeeld is variabele A een string (tekenreeks) en variabele B is een integer (geheel getal). Template:Documentation/AOO BASIC zorgt er voor dat variabele B naar een string wordt geconverteerd gedurende de toewijzing aan variabele A. Deze conversie is veel omvattender dan het lijkt: de integer B blijft in het werkgeheugen in de vorm van een twee-byte lang getal. Aan de andere kant is A een string en de computer bewaart een één- of twee-byte lange waarde voor elk teken (elk getal). Daarom moet, vóórdat de inhoud van B naar A wordt gekopieerd, B worden geconverteerd naar de interne indeling van A.

Anders dan in de meeste programmeertalen voert BASIC conversies van typen automatisch uit. Dit kan echter fatale consequenties hebben. Bij nadere beschouwing, blijkt de volgende reeks code

Dim A As String
 
Dim B As Integer
 
Dim C As Integer
 
B = 1
 
C = 1
 
A = B + C

die op het eerste gezicht recht toe recht aan lijkt te zijn, uiteindelijk een soort valstrik te zijn. De interpreter van BASIC berekent eerst het resultaat van het proces om op te tellen en converteert dat dan naar een string, die, als het resultaat ervan, de string 2 produceert.

Als, aan de andere kant, de interpreter van BASIC eerst de beginwaarden B en C naar een string converteert en de operator plus toepast op het resultaat, produceert het de string 11.

Hetzelfde is van toepassing bij het gebruiken van variabelen van het type Variant:

Dim A
 
Dim B
 
Dim C
 
B = 1
 
C = "1"
 
A = B + C

Omdat variabelen van het type variant zowel getallen als tekenreeksen mogen bevatten, is het niet helder of de variabele A wordt toegewezen aan het getal 2 of de tekenreeks 11.

De opgemerkte bronnen voor fouten voor impliciete conversies voor typen kunnen alleen worden vermeden door zorgvuldig te programmeren; bijvoorbeeld door niet het gegevenstype Variant te gebruiken.

Template:Documentation/AOO BASIC biedt een scala aan functies voor conversie, die u kunt gebruiken om te definiëren wanneer het gegevenstype van een bewerking zou moeten worden geconverteerd, om andere fouten, die het resultaat zijn van impliciete conversies van typen, te vermijden:

CStr(Var)
converteert alle gegevenstypen naar een string (tekenreeks).
CInt(Var)
converteert alle gegevenstypen naar een waarde Integer (geheel getal).
CLng(Var)
converteert alle gegevenstypen naar een waarde Long.
CSng(Var)
converteert alle gegevenstypen naar een waarde Single.
CDbl(Var)
converteert alle gegevenstypen naar een waarde Double.
CBool(Var)
converteert alle gegevenstypen naar een waarde Boolean.
CDate(Var)
converteert alle gegevenstypen naar een waarde Date.

U kunt deze functies voor conversie gebruiken om te definiëren hoe Template:Documentation/AOO BASIC dit type bewerkingen voor conversie zou moeten uitvoeren:

Dim A As String
 
Dim B As Integer
 
Dim C As Integer
 
B = 1
 
C = 1
 
A = CStr(B + C) ' B en C worden eerst bij elkaar opgeteld en dan
 
' geconverteerd naar de string "2"
 
A = CStr(B) + CStr(C) ' B en C worden geconverteerd naar een String, en dan
 
' gecombineerd om de string "11" te produceren

Gedurende de eerste optelling in het voorbeeld telt Template:Documentation/AOO BASIC eerst de integer-variabelen bij elkaar op en converteert dan het resultaat naar een reeks tekens. A wordt toegewezen aan de string 2. In tweede instantie worden de integer-variabelen eerst geconverteerd naar twee strings en dan aan elkaar gekoppeld door middel van de toewijzing. Aan A wordt daarom de string 11 toegewezen.

De numerieke functies voor conversie CSng en CDbl accepteren ook decimale getallen. Het symbool dat is gedefinieerd in de corresponderende land-specifieke instellingen moet wordne gebruikt als het teken voor de decimale punt. In tegenstelling daaraan gebruikt de methode CStr de huidige geselecteerde land-specifieke instellingen bij het opmaken van getallen en details voor datums en tijden.

De functie Val verschilt van de methoden Csng, Cdbl en Cstr. Het converteert een string naar een getal; het verwacht echter altijd dat een punt wordt gebruikt als symbool voor de decimale punt.

Dim A As String
 
Dim B As Double
 
A = "2.22"
 
B = Val(A) ' Wordt correct geconverteerd, ongeacht de
 
' land-specifieke instellingen

Controleren van de inhoud van variabelen

In sommige gevallen kan de datum niet worden geconverteerd:

Dim A As String
 
Dim B As Date
 
A = "test"
 
B = A ' Veroorzaakt een foutbericht

In het weergegeven voorbeeld is de toewijzing van de string test als een variabele Date niet zinvol, dus rapporteert de interpreter van BASIC een fout. Hetzelfde is van toepassing als wordt geprobeerd een tekenreeks toe te wijzen aan een variabele Boolean:

Dim A As String
 
Dim B As Boolean
 
A = "test"
 
B = A ' Veroorzaakt een foutbericht

Opnieuw rapporteert de interpreter van BASIC een fout.

Deze foutberichten kunnen worden vermeden door het programma te controleren vóór een toewijzing, om vast te stellen of de inhoud van de variabele die moet worden toegewezen overeenkomt met het type variabele dat het doel is. Template:Documentation/AOO BASIC biedt de volgende functies om voor dit doel te testen:

IsNumeric(Waarde)
controleert of een waarde een getal is.
IsDate(Waarde)
controleert of een waarde een datum is.
IsArray(Waarde)
controleert of een waarde een array is.

Deze functies zijn in het bijzonder handig bij het navragen van invoer van de gebruiker. Bijvoorbeeld: u kunt controleren of een gebruiker een geldig getal of datum heeft ingevoerd.

If IsNumeric(InvoerGebruiker) Then
 
GeldigeInvoer = InvoerGebruiker
 
Else
 
GeldigeInvoer = 0
 
MsgBox "Foutbericht."
 
End If

In het voorgaande voorbeeld wordt, als de variabele InvoerGebruiker een geldige numerieke waarde bevat, deze toegewezen aan de variabele GeldigeInvoer. Als InvoerGebruiker geen geldig getal bevat wordt aan GeldigeInvoer de waarde 0 toegewezen en wordt een foutbericht weergegeven.

Waar functies voor het testen voor het controleren van getallen, details voor datums en arrays in Template:Documentation/AOO BASIC wel bestaan, bestaat er geen overeenkomstige functie voor het controleren van Booleaanse waarden. De functionaliteit kan echter worden geïmiteerd door de functie IsBoolean te gebruiken:

Function IsBoolean(Waarde As Variant) As Boolean
 
On Error Goto ErrorIsBoolean:
 
Dim Dummy As Boolean
 
Dummy = Waarde
 
IsBoolean = True
 
On Error Goto 0
 
Exit Sub
 
ErrorIsBoolean:
 
IsBoolean = False
 
On Error Goto 0
 
End Function

De functie IsBoolean definieert een interne hulpvariabele Dummy van het type Boolean en probeert die toe te wijzen aan de getransfereerde waarde. Als de toewijzing succesvol verloopt geeft de functie True terug. Als hij faalt wordt een runtime-fout geproduceerd, de foutafhandeling onderschept de fout en de functie geeft False terug.

Documentation note.png VBA : Als een string in Template:Documentation/AOO BASIC een niet-numerieke waarde bevat en indien die wordt toegewezen aan een getal, produceert Template:Documentation/AOO BASIC geen foutbericht, maar stopt met het converteren van de string bij het eerste ongeldige teken. Deze procedure verschilt van VBA. Daar wordt een fout geactiveerd en wordt de implementatie van het programma beëindigd als een overeenkomstige toewijzing wordt uitgevoerd.


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