Fonctions de conversion (bibliothèque d'exécution de Apache OpenOffice)

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png

Souvent, une variable d'un certain type doit être convertie dans un autre type.

Conversions de type implicites et explicites

Le moyen le plus simple de convertir le type d'une variable est d'utiliser une assignation :

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

Dans cet exemple, la variable A est une chaîne, tandis que la variable B est un nombre entier. Apache OpenOffice Basic s'assure que la variable B est convertie en chaîne pendant l'assignation à la variable A. Cette conversion est bien plus complexe qu'il n'y paraît : l'entier B est stocké en mémoire de travail sous la forme d'un nombre sur deux octets. A, en revanche, est une chaîne de caractères : l'ordinateur enregistre chaque caractère (chaque chiffre) dans une valeur sur un ou deux octets. Pour cela, avant de copier le contenu de B dans A, il faut convertir B au format interne de A.

Contrairement à la plupart des autres langages de programmation, Basic effectue ce type de conversion de manière automatique. Cependant, ceci peut avoir des conséquences désastreuses. En y regardant de près, le code suivant :

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

qui, à première vue, semble évident, se révèle en fait assez trompeur. L'interpréteur Basic commence par calculer le résultat de l'addition, puis convertit celui-ci en chaîne, ce qui donne la chaîne 2.

Si, en revanche, l'interpréteur Basic commence par convertir les valeurs de départ B et C en chaînes, puis applique l'opérateur plus au résultat, cela produit la chaîne 11.

Le même principe s'applique lorsque vous utilisez des variables de type variant :

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

Comme les variables de type variant peuvent contenir des nombres et des chaînes, il est difficile de prévoir si la variable A recevra le nombre 2 ou la chaîne 11.

Pour éviter les erreurs liées aux conversions de type implicites, il est indispensable de s'astreindre à une certaine rigueur dans la programmation, par exemple en évitant d'utiliser des données de type variant.

Pour éviter d'autres erreurs dues aux conversions de type implicites, Apache OpenOffice Basic fournit un éventail de fonctions de conversion, que vous pouvez utiliser pour définir le moment auquel le type des données d'une opération doit être converti :

CStr(Var)
convertit tout type de données en chaîne de caractères.
CInt(Var)
convertit tout type de données en valeur entière.
CLng(Var)
convertit tout type de données en valeur longue.
CSng(Var)
convertit tout type de données en valeur simple.
CDbl(Var)
convertit tout type de données en valeur double.
CBool(Var)
convertit tout type de données en valeur booléenne.
CDate(Var)
convertit tout type de données en date.

Vous pouvez vous servir de ces fonctions de conversion pour définir la façon dont Apache OpenOffice Basic doit effectuer ces opérations :

Dim A As String
Dim B As Integer
Dim C As Integer
 
B = 1 
C = 1
A = CStr(B + C)         ' B and C are added together first, then
                        ' converted to the string "2"
A = CStr(B) + CStr(C)   ' B and C are converted into a string,then
                        ' combined to produce the string "11"

Au cours de la première addition de l'exemple, Apache OpenOffice Basic commence par ajouter les variables entières, puis convertit le résultat en chaîne de caractères. La chaîne 2 est assignée à A. Dans le second exemple, les variables entières sont d'abord converties en deux chaînes de caractères distinctes, qui sont concaténées au cours de l'assignation. Par conséquent, la chaîne 11 est assignée à A.

Les fonctions de conversion numériques CSng et CDbl acceptent également les nombres décimaux. Vous devez utiliser comme séparateur de décimales le symbole défini dans les paramètres régionaux correspondants. Inversement, les méthodes CStr utilisent les paramètres régionaux sélectionnés pour les détails du formatage des nombres, des dates et de l'heure.

La fonction Val est différente des méthodes Csng, Cdbl et Cstr. Elle convertit une chaîne en nombre, mais attend toujours un point comme séparateur de décimales.

Dim A As String
Dim B As Double
 
A = "2.22"
B = Val(A)      ' Is converted correctly regardless of the
                ' country-specific settings

Vérification du contenu des variables

Dans certains cas, la date ne peut pas être convertie :

Dim A As String
Dim B As Date
 
A = "test"
B = A            ' Creates error message

Dans cet exemple, l'assignation de la chaîne test à une variable de date n'a aucun sens, ce qui provoque une erreur de l'interpréteur Basic. Le même principe s'applique lorsque vous tentez d'assigner une chaîne à une variable logique :

Dim A As String
Dim B As Boolean
 
A = "test"
B = A            ' Creates error message

Là encore, l'interpréteur Basic indique une erreur.

Il est possible d'éviter ces messages d'erreur en vérifiant le programme avant une assignation, afin de déterminer si le contenu de la variable à assigner correspond au type de la variable cible. Les fonctions de test suivantes de Apache OpenOffice Basic ont été conçues à cet effet :

IsNumeric(Value)
détermine si une valeur est un nombre.
IsDate(Value)
détermine si une valeur est une date.
IsArray(Value)
détermine si une valeur une matrice.

Ces fonctions sont particulièrement utiles lorsque vous demandez une entrée utilisateur. Par exemple, vous pouvez vérifier qu'un utilisateur a bien saisi une date ou un nombre correct.

If IsNumeric(UserInput) Then
  ValidInput = UserInput
Else
  ValidInput = 0
  MsgBox "Error message."
End If

Dans l'exemple ci-dessus, si la variable UserInput contient une valeur numérique correcte, elle est assignée à la variable ValidInput. Si UserInput ne contient pas de nombre correct, la valeur 0 est assignée à ValidInput et un message d'erreur s'affiche.

Apache OpenOffice Basic fournit des fonctions de test pour vérifier les nombres, les dates et les matrices, mais aucune fonction permettant de vérifier les valeurs booléennes. Il est cependant possible d'imiter cette fonctionnalité à l'aide de la fonction IsBoolean :

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

La fonction IsBoolean définit une variable auxiliaire interne Dummy booléenne et tente de l'assigner à la valeur transférée. Si l'assignation fonctionne, la fonction retourne True. En cas d'échec, le programme génère une erreur d'exécution, qui évite que la fonction de test ne retourne une erreur.

Documentation note.png Si, dans Apache OpenOffice Basic, une chaîne contenant une valeur non numérique est assignée à un nombre, Apache OpenOffice Basic ne génère pas d'erreur, mais transmet la valeur 0 à la variable. Cette procédure n'est pas la même que dans VBA. Dans VBA, une erreur est générée et l'implémentation du programme est interrompue si une assignation correspondante est exécutée.
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools