Matrices

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

Outre les variables simples (scalaires), Apache OpenOffice Basic prend en charge les matrices (champs de données). Un champ de données contient plusieurs variables adressées au moyen d'un index.

Matrices simples

Une déclaration de matrice est similaire à celle d'une variable simple. Cependant, contrairement aux variables, le nom de la matrice est suivi de parenthèses dont le contenu spécifie le nombre d'éléments. L'expression :

Dim MyArray(3)

déclare une matrice de quatre variables de type variant, à savoir MyArray(0), MyArray(1), MyArray(2) et MyArray(3).

Vous pouvez également spécifier le type de variables contenues dans une matrice. Par exemple, la ligne suivante déclare une matrice de quatre variables de type entier :

Dim MyInteger(3) As Integer

Dans les exemples précédents, l'index de la matrice commence toujours par la valeur initiale standard de zéro. Il est également possible de spécifier une plage de validité (valeurs initiale et finale) lors de la déclaration du champ de données. L'exemple suivant déclare un champ de données comprenant six valeurs entières, pouvant être adressées par des valeurs d'index de 5 à 10 :

Dim MyInteger(5 To 10)

Les valeurs d'index ne sont pas nécessairement positives. La déclaration de l'exemple suivant est également correcte, mais avec des limites négatives pour le champ de données :

Dim MyInteger(-10 To -5)

Le champ de données d'entiers déclaré comprend 6 valeurs, pouvant être adressées par des valeurs d'index allant de -10 à -5.

Lorsque vous définissez des valeurs d'index pour un champ de données, vous devez respecter trois limites :

  • La valeur d'index minimale est de -32768.
  • La valeur d'index maximale est de 32767.
  • Le nombre maximum d'éléments (pour une dimension de champ de données) est de 16368.
Documentation note.png D'autres limites peuvent s'appliquer aux valeurs d'index pour les champs de données dans VBA. La même considération s'applique également au nombre maximum d'éléments possibles par dimension. Vous trouverez les valeurs qui s'appliquent ici dans la documentation VBA correspondante.

Valeur spécifique pour l'index de début

Généralement, l'index de début d'un champ de données est 0, mais vous pouvez remplacer cette valeur par défaut par 1 pour toutes les déclarations de champ de données à l'aide de l'appel :

Option Base 1

Cet appel doit être inclus dans l'en-tête d'un module si vous voulez qu'il s'applique à l'ensemble des déclarations de matrice du module. Cependant, cet appel n'affecte pas les séquences UNO définies par l'API Apache OpenOffice dont l'index commence toujours par 0. Pour plus de clarté, évitez d'utiliser Option Base 1.

Option Base 1 se contente de modifier la valeur d'index de début et n'affecte pas le nombre d'éléments d'une matrice. La déclaration :

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

crée 4 variables entières qui peuvent être désignées par les expressions MyInteger(1), MyInteger(2), MyInteger(3) et MyInteger(4).

Documentation note.png Dans Apache OpenOffice Basic, l'expression Option Base 1 n'affecte pas le nombre d'éléments d'une matrice, contrairement à ce qui se produit dans VBA. Dans Apache OpenOffice Basic, seul l'index de début est modifié. La déclaration MyInteger(3) crée trois valeurs entières dans VBA avec des valeurs d'index de 1 à 3, tandis que la même déclaration dans Apache OpenOffice Basic crée quatre valeurs entières avec des valeurs d'index de 1 à 4. Avec Option Compatible, Apache OpenOffice Basic se comporte comme VBA.

Champs de données multidimensionnels

Outre les champs de données à une dimension, vous pouvez utiliser des champs de données multidimensionnels dans Apache OpenOffice Basic. Les différentes dimensions sont séparées les unes des autres par des virgules. L'exemple :

Dim MyIntArray(5, 5)

définit une matrice d'entiers à deux dimensions, comportant chacune six index (pouvant être adressées par les valeurs d'index de 0 à 5). La matrice peut stocker un total de 6 × 6 = 36 valeurs entières.

Dans Apache OpenOffice Basic, vous pouvez définir des matrices ayant des centaines de dimensions. Cependant, en pratique, ce nombre est limité par la quantité de mémoire dont vous disposez.

Modifications dynamiques des dimensions des champs de données

Dans les exemples précédents, les dimensions des champs de données étaient spécifiées. Il est également possible de définir des matrices dont la dimension des champs de données change de façon dynamique. Vous pouvez par exemple définir une matrice pour contenir tous les mots d'un texte commençant par la lettre A. Comme le nombre de ces mots n'est pas connu au départ, il est nécessaire de pouvoir modifier les limites du champ par la suite. Pour effectuer cette opération dans Apache OpenOffice Basic, utilisez l'appel suivant :

ReDim MyArray(10)
Documentation note.png Contrairement à VBA, où seules les matrices dynamiques peuvent être dimensionnées à l'aide de la commande Dim MyArray(), dans Apache OpenOffice Basic, vous pouvez modifier les matrices statiques et dynamiques à l'aide de ReDim.

L'exemple suivant modifie la dimension de la matrice initiale pour qu'elle puisse stocker 11 ou 21 valeurs :

Dim MyArray(4) As Integer ' Declaration with five elements 
' ...
ReDim MyArray(10) As Integer ' Increase to 11 elements
' ... 
ReDim MyArray(20) As Integer ' Increase to 21 elements

Lorsque vous redéfinissez les dimensions d'une matrice, vous pouvez utiliser chacune des options présentées dans les sections précédentes. Cela comprend notamment les déclarations de champs de données multidimensionnels et les spécifications explicites de valeurs d'index de début et de fin. Lors de la modification des dimensions d'un champ de données, tout son contenu est perdu. Pour conserver les valeurs d'origine, utilisez la commande Preserve :

Dim MyArray(10) As Integer ' Defining the initial 
' dimensions
' ... 
ReDim Preserve MyArray(20) As Integer ' Increase in 
' data field, while
' retaining content

Lorsque vous utilisez Preserve, assurez-vous que le nombre de dimensions et le type de variable restent les mêmes.

Documentation note.png Contrairement à VBA, où seule la limite supérieure de la dernière dimension d'un champ de données peut être modifiée à l'aide de la commande Preserve, dans Apache OpenOffice Basic, vous pouvez modifier également les autres dimensions.

Si vous utilisez ReDim avec Preserve, vous devez employer le même type de données que celui qui a été indiqué lors de la déclaration initiale du champ de données.

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