Matrici

From Apache OpenOffice Wiki
Jump to: navigation, search

Oltre alle variabili semplici (scalari), OpenOffice.org Basic supporta anche i campi di dati (matrici). Un campo di dati contiene diverse variabili identificate con un indice.

Matrici semplici

Una dichiarazione di matrice è simile a quella di una variabile semplice ma, a differenza di questa, il nome della matrice è seguito da parentesi che contengono le specifiche del numero di elementi. L'espressione

Dim MyArray(3)

dichiara una matrice con quattro variabili del tipo variante, ossia MyArray(0), MyArray(1), MyArray(2) e MyArray(3).

In una matrice potete dichiarare anche variabili di tipo specifico. La riga seguente, ad esempio, dichiara una matrice con quattro variabili intere:

Dim MyInteger(3) As Integer

In questi esempi, l'indice per la matrice inizia sempre con valore iniziale standard di zero. In alternativa, per la dichiarazione del campo di dati potete specificare un intervallo di validità con valori iniziali e finali. L'esempio seguente dichiara un campo di dati con sei valori interi e indirizzabile utilizzando gli indici da 5 a 10:

Dim MyInteger(5 To 10)

Gli indici non devono essere necessariamente valori positivi. L'esempio seguente mostra una dichiarazione corretta, ma con limiti dei campi di dati negativi:

Dim MyInteger(-10 To -5)

L'esempio dichiara un campo di dati intero con 6 valori che possono essere identificati utilizzando gli indici da -10 a -5.

Per la definizione degli indici dei campi di dati dovete osservare tre limiti:

  • L'indice più piccolo possibile è -32768.
  • L'indice più grande possibile è 32767.
  • Il numero massimo di elementi (all'interno di una dimensione del campo di dati) è 16368.
Documentation note.png Per gli indici dei campi di dati in VBA si applicano talvolta limiti diversi. Lo stesso si applica anche al numero massimo di elementi possibile per ogni dimensione.
I valori validi possono essere reperiti nella documentazione VBA pertinente.

Valore specificato per l'indice iniziale

L'indice iniziale di un campo di dati inizia generalmente con il valore 0. In alternativa, è possibile modificare l'indice iniziale per tutte le dichiarazioni dei campi di dati sul valore 1 utilizzando la chiamata:

Option Base 1

La chiamata deve essere inclusa nell'intestazione di un modulo se si desidera applicarla a tutte le dichiarazioni di matrice del modulo. Tuttavia, questa chiamata non incide sulle sequenze UNO definite tramite l'API di OpenOffice.org il cui indice inizia sempre con 0. Per maggiore chiarezza, evitare l'uso di Option Base 1.

Il numero di elementi della matrice non è influenzato dall'uso di Option Base 1; viene modificato solo l'indice iniziale. La dichiarazione

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

crea 4 variabili intere che possono essere descritte con le espressioni MyInteger(1), MyInteger(2), MyInteger(3) e MyInteger(4).

Documentation note.png In OpenOffice.org Basic, l'espressione Option Base 1 non incide sul numero di elementi della matrice come in VBA. In OpenOffice.org Basic è invece l'indice iniziale a

spostarsi. Mentre la dichiarazione MyInteger(3) in VBA crea tre valori interi con gli indici da 1 a 3, la stessa dichiarazione in OpenOffice.org crea quattro valori interi con gli indici da 1 a 4. Usando Option Compatible, OpenOffice.org Basic si comporta come VBA.

Campi di dati a più dimensioni

Oltre ai campi di dati a una dimensione, OpenOffice.org Basic supporta anche i campi di dati a più dimensioni. Le dimensioni corrispondenti sono separate per mezzo di virgole. L'esempio

Dim MyIntArray(5, 5)

definisce una matrice intera con due dimensioni, ciascuna con 6 indici (possono essere identificati con gli indici da 0 a 5). L'intera matrice può registrare un totale di 6 x 6 = 36 valori interi.

Sebbene sia possibile definire centinaia di dimensioni nelle matrici di OpenOffice.org Basic, la quantità di memoria disponibile limita il numero di dimensioni possibili.

Modifiche dinamiche nelle dimensioni dei campi di dati

Gli esempi precedenti sono basati sui campi di dati con una dimensione specificata. Potete però definire anche matrici in cui la dimensione dei campi di dati varia dinamicamente. Ad esempio, potete definire una matrice per contenere tutte le parole di un testo che iniziano con la lettera A. Poiché il numero di queste parole è inizialmente sconosciuto, dovete essere in grado di modificare successivamente i limiti del campo. Per procedere in tal senso in OpenOffice.org Basic, utilizzate la chiamata seguente:

ReDim MyArray(10)
Documentation note.png A differenza di VBA, in cui potete utilizzare solo matrici dinamiche con l'istruzione Dim MyArray(), OpenOffice.org Basic permette di modificare le matrici sia statiche che dinamiche con l'istruzione ReDim.

L'esempio seguente modifica la dimensione della matrice iniziale in modo che possa registrare 11 o 21 valori:

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

Quando ripristinate le dimensioni di una matrice, potete utilizzare una qualsiasi delle opzioni descritte nelle sezioni precedenti. Questo include la dichiarazione di campi di dati a più dimensioni e l'indicazione di valori iniziali e finali espliciti. Modificando le dimensioni del campo di dati, tutti i contenuti vanno persi. Per conservare i valori originali, avvaletevi del comando Preserve:

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

Quando usate Preserve, accertatevi che il numero di dimensioni e il tipo di variabili rimanga lo stesso.

Documentation note.png A differenza di VBA, in cui l'uso di Preserve vi permette di modificare solo il limite superiore dell'ultima dimensione del campo di dati, OpenOffice.org Basic vi permette di modificare anche le altre dimensioni.

Se utilizzate ReDim con Preserve, dovete utilizzare lo stesso tipo di dati specificato nella dichiarazione del campo di dati originale.

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