Array in Visual dBASE 
parte prima 
ultima modifica : 21 marzo 1999 
Ken Mayer, 
dBASE, Inc. 
Traduzione in Italiano di Antonio Campagna - Ottobre 2001


Gli obiettivi di questo documento sono: 

Se volete maggiori informazioni rispetto a quelle fornite da questo documento esaminate ARRAY2.HTM.  In più, il manuale  di riferimento al linguaggio  e la guida in linea di Visual dBASE possono essere piuttosto utili. 


 

Che cosa è un Array Come definisco un Array Visualizzare i dati da un Array La Funzione Type() 
Parti di un Array Inserimento Dati in un Array La Funzione Alen() La Funzione Empty()
L'utilità degli Array Cancellare Dati da un Array Ordinamento di Array Ok! e dopo?


Che cosa é un Array? 

Un array in Visual dBASE è un oggetto usato per memorizzare dati. In alcuni casi si può usare un array per emulare una tabella in memoria. Un array usa un singolo "nome" (identificatore), per riferirsi a locazioni di memoria multiple. Un semplice array contiene una "dimensione" o colonna di informazioni. 

In Visual dBASE un array è detto "irregolare", perché in esso potete memorizzare diversi tipi di dati. 
È probabile che in un elemento si memorizzi una data, in un altro un numero e in un terzo un valore carattere - dBASE non se ne cura... 
... almeno finché non tentate di ordinare i dati o effettuate operazioni di ricerca, in tal caso potreste avere dei problemi. 
In un  array di dBASE si possono memorizzare anche altri array. Ci sono due modi per fare questo: 

Come dicevamo prima è molto importante comprendere che un array in Visual dBASE è un oggetto.   

Gli sviluppatori di Visual dBASE nel implementazione del linguaggio di programmazione, hanno ampliato le capacità degli array rispetto ai giorni di dBASE IV. 

Parti di un Array
 
Un array deve avere le seguenti caratteristiche: 

Un Nome: in questo documento userò una convenzione (detta notazione dBASE ungherese; in onore del leggendario programmatore Charles Simonyi) la quale  specifica che i nomi degli array siano preceduti da un prefisso che ne indica il tipo di dato, nel caso specifico la lettera "a" (ad esempio, aMioArray).
La maggior parte delle volte, un array richiede un nome. C'è una struttura speciale in Visual dBASE chiamata "Array Letterale" che qui sarà esaminata brevemente (si approfondirà il discorso nel documento ARRAY2.HTM), che non richiede un nome. 

Elementi: gli elementi sono i contenitori, o forse direste le 'celle', usate per memorizzare i dati in un array.

Dimensioni: gli array possono avere una singola dimensione (solo righe (una colonna)), due dimensioni (righe e colonne) o anche tre o più dimensioni. Potete pensare ad un array tridimensionale come il "cubo magico". Un altro modo di pensare ad un array a tre (o più) dimensioni, è un "array di array" . Non c'è un modo facile di visualizzare qualsiasi array oltre la "terza dimensione". Per gli scopi di questi documenti (Array?. HTM) non utilizzeremo array con più di due dimensioni. 


Righe: tutti gli array hanno righe. Una riga può contenere qualsiasi tipo di dato supportato da Visual dBASE, incluso un altro array (array irregolari). 

Colonne: tutti gli array hanno almeno una colonna. Se l'array ha solamente una colonna, di solito si considera che sia un array uni-dimensionale. Se l'array ha due o più colonne, è almeno un array bi-dimensionale. Un array bi-dimensionale è paragonabile ad una tabella, ogni colonna è comparabile ad un campo, ed ogni riga è comparabile ad un record. 

Subscripts: I subscripts sono indici agli elementi contenuti nell'array. Se abbiamo un array formato da una singola colonna, con cinque righe, tramite il subscript puntiamo a ciascuna riga. Se abbiamo un array con più colonne, un subscript si riferisce alla riga, l'altro alla colonna. Quindi tramite i subscript accediamo ad ogni elemento dell'array. Per differenziare un array da una funzione, usiamo le parentesi quadrate (chiamate nel guida "riferimento al linguaggio": Operatori Indice) intorno il subscript(s). 

Esempio 1.

 

Colonna 1

Riga 1 San Francisco
Riga 2 Los Angeles
Riga 3 New York
Riga 4 Miami
Riga 5 Sydney

Array a singola colonna

Per riferirsi alla riga 3 di un array come quello precedente, dovremmo usare la seguente sintassi:

aCity[3] 

  Colonna 1 Colonna 2
Riga 1 San Francisco 4.000.000
Riga 2 Los Angeles 10.000.000
Riga 3 New York 25.000.000
Riga 4 Miami 8.000.000
Riga 5 Sydney 1.000.000

Array con 2 colonne

In un array a due (o più ) colonne, per accedere ad uno specifico elemento abbiamo bisogno di riferirci sia alla riga, sia alla colonna, così per puntare alla popolazione di New York, useremo la seguente sintassi: 

aCity[3,2] 

Il primo subscript (3) punta alla riga, il secondo (2) alla colonna. 

L'utilità degli Array 

Come detto precedentemente, tramite l'uso di un array avete un singolo "nome" che fa riferimento ad un elenco. Altra cosa di notevole importanza è che un array può essere "dinamico", cioè  potete aggiungere o rimuovere facilmente elementi nell'array, potete ordinare i dati contenuti dell'array  e potete scorrere un array, per vedere se contiene un determinato valore. Provate a fare tutto questo con l'elenco di variabili di memoria seguente: 

City1 = "San Francisco" 
City2 = "Los Angeles" 
City3 = "New York" 
City4 = "Miami" 
City5 = "Sydney" 

Le seguenti tre linee di codice possono visualizzare tutti i nomi di città da un array, osservate che il codice è molto più efficiente e compatto:

for i = 1 to ( aCity.size / aCity.dimensions )

? aCity[ i, 1 ]

next 

Se usassimo una variabile per ogni nome di città, dovremmo avere una linea di codice per stampare ogni nome di città, le tre istruzioni precedenti sono sicuramente molto meglio. 
In più, immagazzinando i valori in memoria, processare una lista è una operazione molto più veloce  rispetto alla stessa utilizzando una tabella. 

Potete usare anche un array per emulare una tabella. Se usate un array bi-dimensionale, le righe possono essere equivalenti ai record e le colonne ai campi. Pensate che un array sia simile ad un foglio di calcolo elettronico, questa similitudine potrebbe aiutarvi maggiormente. La parte divertente è che con il moderno software di foglio elettronico, potete creare fogli di calcolo elettronico tridimensionali (pagine multiple) ciò può essere fatto molto bene anche con gli array in Visual dBase. 

Come definisco un Array? 

Avete bisogno di dire a dBase che userete un array. Questo vuol dire che dovete:

In Visual dBase, un array è un oggetto. Questo è piuttosto utile se utilizzate la sintassi OOP per definire un array. Ci sono almeno un paio di modi di definire un array. Il metodo di programmazione procedurale standard è: 

DECLARE nomearray [righe,colonne] 

Il  nomearray  è l'identificatore tramite il quale farete riferimento a tutti  gli elementi memorizzati nell'array. Il numero di righe è richiesto, il numero di colonne si richiede solamente se state definendo un array con colonne multiple. Notate che questo metodo da alcuni è considerato obsoleto e voi probabilmente dovreste usare la nuova sintassi, mostrata sotto. La sintassi DECLARE eventualmente può essere abbandonata dirigendosi verso una mentalità OOP. 

Voi dovreste usare la sintassi OOP con dBase, la quale fra le altre cose vi dà un array dinamico: 

nomearray = NEW ARRAY() 

Se volete l'array può essere dichiarato con una specifica dimensione ad es.: 

aCity = NEW ARRAY(5,2) 

L'istruzione precedente stabilisce che l'array conterrà 10 elementi, 5 righe e 2 colonne. 
C'è un altro modo di definire  un array uni-dimensionale, ma questo già presume che sappiate a priori ciò che l'array dovrà contenere. Usando questo modo state creando  un "Array Letterale" (maggiori informazioni in ARRAY2.HTM): 

aCity = {"San Francisco","Los Angeles","New York","Miami","Sydney"} 

Un array letterale usa le parentesi graffe e ciascun elemento dell'array è separato da una virgola. 
 
Adesso che abbiamo definito l'Array, come fare ad inserire dati? 

Un array è inutile senza dati. Una cosa interessante è che se non "popolate" l'array, dBase automaticamente immette un valore logico "falso", in ogni elemento a cui non è assegnato un altro valore, almeno questo è quello che sembra. In realtà questa è una cella vuota e se usate la funzione dBase Empty(), essa restituirà un valore vero, per ogni cella a cui non è stata assegnata un valore. Ciò può essere utile, ma  alle volte può anche essere un po' noioso, quando state tentando di compiere specifici compiti (come ordinare un array). Per esempio, se tentate di ordinare su valori carattere, numerico o data e ad alcuni degli elementi non sono stati assegnati valori o sono stati cancellati (vedete sotto), otterrete un messaggio di errore "Data type mismatch". 

Per gli obiettivi di questo documento ci sono allegati due piccoli programmi nel file .zip: SHOW1.PRG e SHOW2.PRG. Lo scopo di questi programmi è mostrare i contenuti dell'array su cui state attualmente lavorando, così che potete vedere l'effetto dei comandi che  state utilizzando. Il primo prg è utile per array uni-dimensionali, il secondo è per array a colonne multiple. 
Per usare i suddetti programmi usate la seguente sintassi

do show1 with "aCity" 
oppure 
do show2 with "aCity" 

Dove "aCity" è il nome dell'array che state esaminando. 

Assegnare valori ad un array può essere abbastanza semplice, ad esempio: 

aCity[1] = "San Francisco" // richiede che teniate conto del subscript 
oppure 
aCity.Add("San Francisco") // usa il metodo Add() 
oppure 
aCity = {"San Francisco","Los Angeles","New York","Miami","Sydney"} 

oppure abbastanza interessante, potete estrarre le informazioni da una tabella: 

COPY TO ARRAY aCity FIELDS NomeTabella->City 

Il comando precedente richiede che: 

Per maggiori informazioni su COPY TO ARRAY, vedete nel manuale di riferimento al linguaggio oppure nella guida in linea (HELP COPY TO ARRAY). Argomenti correlati: APPEND FROM ARRAY (memorizza il contenuto di un array in una tabella) e REPLACE FROM ARRAY (sostituisce il contenuto di un record con il contenuto di un array) 
NOTA: I comandi COPY TO ARRAY (e correlati ) non hanno equivalenti in OODML di Visual dBASE 7 ... 
 
Ci sono altri modi di riempire un array. Molto dipende dalle vostre necessità. Per esempio, se voleste memorizzare in un array due campi: "nome" e "cognome", potete memorizzarli sia come array con due colonne, sia come array uni-dimensionale (una colonna). Per quest'ultimo array potreste memorizzare i dati come  "Cognome,Nome" (per esempio "Campagna,Antonio). 
Ci sono due modi di fare quanto suddetto, il primo è un po' più complesso e non è veramente necessario... è qui per mostrare l'eleganza del secondo modo: 

1. Modo

q = new Query() // Istanza oggetto query
q.sql = "select * from miatabella" 
// seleziono tutti i campi della tabella
q.active=true 
// attivo la query
r = q.rowset 
// assegno alla variabile r il rowset
nMax = r.count()
// restituisce il numero di record nella tabella 
declare aNames[nMax]
// definisco l'array 
for nRow = 1 to nMax
// scansione della tabella record per record

// inserisco l'informazione  nell'array  
aNames[nRow] = trim( r.fields["last"].value )+; 
r.fields["first"].value 
r.next()
// vado alla riga successiva 

next // fine del ciclo for  

Il codice precedente  svolgerà egregiamente il suo compito, ma  verificate il più semplice e più elegante codice mostrato sotto: 

2. modo

q = new Query() // Istanza oggetto query
q.sql = "select * from miatabella" 
// seleziono tutti i campi della tabella
q.active=true 
// attivo la query
r = q.rowset 
// assegno alla variabile r il rowset
aNames = new Array() // Istanza Oggetto Array
r.first() // primo record della tabella
do while not r.endOfSet // Scansione della tabella... 

// inserisco l'informazione  nell'array  
aNames.add( trim( r.fields["last"].value )+; 
r.fields["first"].value ) 
r.next()
//  record/riga successiva 

enddo // fine ciclo do While

Non c'è nessun bisogno di preoccuparsi del  subscript o di determinare la dimensione dell'array prima aggiungere elementi. Questo è molto più semplice.  
Come potete vedere, gli array sono piuttosto flessibili e la confusione che si genera dal loro uso in dBase deriva proprio da questa flessibilità! 

Cancellare dati da un array 

Ci sono volte quando usiamo un array che abbiamo la necessità di cancellare un elemento, o una riga,  o una colonna.  C'è un trucco per questa operazione. Quando usate le funzioni dBase che gestiscono la cancellazione (elemento, riga o colonna), dBase trasporta l'elemento/riga /colonna alla fine dell'array e sostituisce il valore contenuto negli elementi con il valore logico "falso" (in realtà, "vuoto" vedete sotto). Se usate le funzioni/metodi array di ordinamento in dBase, su un array nel quale avete cancellato un elemento/riga/colonna, vi sarà restituito un errore. Alla fine di questa sezione vi mostrerò come evitare il suddetto errore se utilizzate  il metodo resize() o la funzione aResize(). 

Cancellare un elemento in un array uni-dimensionale 

nomearray.Delete(elemento) 
oppure 
aDel(nomearray,elemento) 

Per esempio, nell'array aCity simile al seguente: 

 

Colonna 1

Riga 1 San Francisco
Riga 2 Los Angeles
Riga 3 New York
Riga 4 Miami
Riga 5 Sydney

se volete cancellare il secondo elemento: 

aCity.delete(2) 
oppure 
aDel(aCity,2) 

L'array conterrà i valori seguenti dopo avere eseguito uno di questi due comandi: 

 

Colonna 1

Riga 1 San Francisco
Riga 2 New York
Riga 3 Miami
Riga 4 Sydney
Riga 5 false

Cancellare una riga (array a una o più dimensioni ): 

nomearray.Delete(nRow,1) // secondo parametro = riga (1) oppure colonna (2) 
oppure 
aDel(nomearray,nRow,1)
// terzo parametro = riga (1) o colonna (2) 

Presumendo una versione dell'array aCity simile al seguente: 

  Colonna 1 Colonna 2
Riga 1 San Francisco 4.000.000
Riga 2 Los Angeles 10.000.000
Riga 3 New York 25.000.000
Riga 4 Miami 8.000.000
Riga 5 Sydney 1.000.000

Per cancellare la seconda riga di questo array possiamo usare: 

aCity.Delete(2,1) 
oppure 
aDel(aCity,2,1) 

Dopo la cancellazione l'array sarà simile al seguente: 

  Colonna 1 Colonna 2
Riga 1 San Francisco 4.000.000
Riga 2 New York 25.000.000
Riga 3 Miami 8.000.000
Riga 4 Sydney 1.000.000
Riga 5 false false

Cancellare una colonna (array a colonna multipla) 

nomearray.Delete(nColumn,2) // secondo parametro = riga (1) oppure colonna (2) 
oppure 
aDel(nomearray,nColumn,2) // terzo parametro = riga (1) oppure colonna (2) 

presumiamo che l'array aCity sia simile al seguente: 

  Colonna 1 Colonna 2 Colonna 3
Riga 1 San Francisco 4.000.000 678
Riga 2 Los Angeles 10.000.000 123
Riga 3 New York 25.000.000 456
Riga 4 Miami 8.000.000 678
Riga 5 Sydney 1.000.000 1234

il comando per cancellare la seconda colonna sarà: 

aCity.Delete(2,2) //il primo 2 è la colonna, il secondo dice a dBASE la colonna da cancellare 
oppure
aDel(aCity,2,2) 

Il quale ci restituirà un array simile al seguente: 

  Colonna 1 Colonna 2 Colonna 3
Riga 1 San Francisco 678 false
Riga 2 Los Angeles 123 false
Riga 3 New York 456 false
Riga 4 Miami 678 false
Riga 5 Sydney 1234 false

Rimuovere gli elementi/righe/colonne cancellati dall'array: 

In tutti i tre casi mostrati, il problema è come notato, che l'elemento/la riga/la colonna cancellata  esisterà ancora nell'array.  Quindi, per rimuovere ciò che è stato cancellato dovete usare il metodo Resize o la funzione aResize

 nomearray.Resize(nNumRows,nNumCols)  
oppure  
aResize(nomearray,nNumRows,nNumCols) 

Gli esempi sottostanti sono stati realizzati in funzione del codice utilizzato per gli esempi precedenti: 

Rimuovere un elemento da un array di uni-dimensionale: 

Procedurale OOP
aDel(aCity,2) aCity.Delete(2)
nRows = aLen(aCity,1) nRows = aCity.subscript( aCity.size,1)
aResize(aCity,nRows-1) aCity.Resize(nRows-1)

Rimuovere una riga di un array multi-dimensionale (il quale rimuove tutti gli elementi nella riga): 

Procedurale OOP
aDel(aCity,2,1) aCity.Delete(2,1)
nRows = aLen(aCity,1) nRows = aCity.subscript( aCity.size,1)
aResize(aCity,nRows-1) aCity.Resize(nRows-1)

Rimuovere una colonna da un array multi-dimensionale

Procedurale OOP
aDel(aCity,2,2) aCity.Delete(2,2)
nColumns = aLen(aCity,2) nColumns = aCity.subscript( aCity.size,2)
nRows = aLen(aCity,1) nRows = aCity.subscript( aCity.size,1)
** Notate, il parametro ROWS deve contenere un valore > 0.
aResize(aCity,nRows,nColumns-1) aCity.Resize(nRows,nColumns-1)

   
Riferimento/Visualizzazione dei dati in un Array 

Ci sono molti modi di lavorare con gli array. Una volta che avete "popolato"  l'array è di solito necessario fare qualche cosa con i dati, ad es. usarli per operazioni di lookups, ordinamento ecc. Quindi la domanda nasce spontanea: 
"Come faccio a riferirmi ai dati contenuti in un array ?
La cosa più importante da ricordare è che avete bisogno di un subscript che punti ai singoli elementi. Se state lavorando con un array multi-colonna,  potete usare le vostre specifiche convenzioni  per i nomi dei vostri subscript, come "nRow" e "nColumn". Così voi probabilmente non confonderete i vostri subscript. Se "mescolate" i vostri subscript, è molto probabile incorrere in errore ( "subscript out of range") o puntare o utilizzare dati sbagliati!  

In un array a singola colonna, per puntare alla riga, potete usare qualsiasi riferimento al subscript che vi piace, ma per questo documento, tenterò di essere coerente e userò "nRow" per il subscript di riga e per un array a colonne multiple, userò "nColumn" per il subscript di colonna. 

Quindi, come visualizzare il contenuto di un array? 

Se conoscete lo specifico elemento a cui accedere, potete fare riferimento tramite il subscript. Presumendo un array simile al seguente: 

 

Colonna 1

Riga 1 San Francisco
Riga 2 Los Angeles
Riga 3 New York
Riga 4 Miami
Riga 5 Sydney

il comando:

? aCity[2] 

Visualizzerà "Los Angeles" 

Se l'array aCity contiene più di una colonna, ovviamente avete bisogno di usare un altro subscript che specifichi la colonna. Presumendo il seguente array: 

  Colonna 1 Colonna 2
Riga 1 San Francisco 4.000.000
Riga 2 Los Angeles 10.000.000
Riga 3 New York 25.000.000
Riga 4 Miami 8.000.000
Riga 5 Sydney 1.000.000

il comando

? aCity[2,2] // Visualizzerà il contenuto dell'elemento inserito seconda  riga e seconda colonna 

Verrà visualizzato 10,000,000. 

Potete fare un "loop"  che vi permetterà di visualizzare il contenuto dell'array: 

for nRow = 1 to aLen( aCity, 1) // aLen() è una funzione che restituisce il numero degli
                                            // elementi di un array
 

? aCity[nRow] // visualizza il contenuto dell'elemento corrispondente 

next 

Il precedente frammento di codice visualizzerà  il contenuto dell'array:

San Francisco 
Los Angeles 
New York 
Miami 
Sydney 
 

La Funzione ALEN() 

Questa utile funzione usa due parametri - il nome dell'array e un operatore numerico opzionale:1 per le righe, 2 per le colonne e 0 per il numero di elementi nell'array (0 per default). E' molto comodo sapere l'esatta dimensione di un array  e il codice di esempio di questi documenti (questo che state leggendo e ARRAY2.HTM) ne fa largo uso. 
 
Se avete un array con più colonne, ovviamente avete bisogno di fare riferimento alla colonna. Ad es. se il vostro array ha tre colonne e volete visualizzarne semplicemente il contenuto delle tre colonne, riga per riga, potete fare  un "loop innestato" come mostrato sotto: 

for nRow = 1 to aLen(aCity,1) 

for nColumn = 1 to aLen(aCity,2) 

? aCity[nRow,nColumn] // visualizza l'elemento corrispondente 

next // nColumn 

next // nRow 

Se facciamo riferimento all'esempio su mostrato (array con tre colonne) il precedente frammento di codice visualizzerà: 

San Francisco 
4.000.000 
678 
Los Angeles 
10.000.000 
123 
New York 
25.000.000 
456 
Miami 
8.000.000 
678 
Sydney 
1.000.000 
1234 

Non molto bello, ma gli elementi contenuti nell'array sono visualizzati. (Per rendere "elegante" quanto precedentemente mostrato date un'occhiata a SHOW2.PRG.) 
 
Ordinare il contenuto di un array 

Qualche volta i dati immessi in un array non sono ordinati in modo specifico e  molto probabilmente avete necessità di ordinarli (sia per visualizzarli in ordine, sia per altri ragioni ). Ci sono due modi in dBase per fare questa operazione: il primo utilizza una funzione, il secondo utilizza un metodo legato ad un oggetto array. 

aCity.Sort() //metodo 
oppure 
aSort(aCity) //funzione

il comando precedente ordina l'array aCity sulla prima colonna. Se ci sono più colonne, le righe saranno tutte spostate con gli elementi nella prima colonna. 

Assumiamo di avere il seguente array prima dell'ordinamento: 

  Colonna 1 Colonna 2
Riga 1 San Francisco 4.000.000
Riga 2 Los Angeles 10.000.000
Riga 3 New York 25.000.000
Riga 4 Miami 8.000.000
Riga 5 Sydney 1.000.000

  dopo: 

  Colonna 1 Colonna 2
Riga 1 Los Angeles 10.000.000
Riga 2 Miami 8.000.000
Riga 3 New York 25.000.000
Riga 4 San Francisco 4.000.000
Riga 5 Sydney 1.000.000

Ordinare sulla seconda colonna: 

aCity.Sort(2) 
oppure 
aSort(aCity,2) 

Otterremo:

  Colonna 1 Colonna 2
Riga 1 Sydney 1.000.000
Riga 2 San Francisco 4.000.000
Riga 3 Miami 8.000.000
Riga 4 Los Angeles 10.000.000
Riga 5 New York 25.000.000

Un paio di Funzioni che sono molto utili quando si lavora con gli Array 

Le seguenti due funzioni sono piuttosto utili quando voi state programmando con array, ma non sono specifiche per gli array 

Type() 

Con la funzione Type()  potete determinare se un oggetto in Visual dBase è definito: se non è definito, questa funzione ritorna il  valore  "U", se è un oggetto ritorna un "O". Se l'oggetto che voi state esaminando è un array, la funzione ritorna un "A" (quindi l'array è un oggetto "speciale") ad esempio: 

?Type("aCity") 

Se questo è un array, vi sarà restituito: 

Se questo è un "normale" oggetto di dBase, vi sarà restituito: 

Se l'array (od oggetto) non è stato definito, vi sarà restituito: 

Bisogna aggiungere che questa  funzione può restituire il tipo di dato contenuto in un elemento di un array. Ad esempio: 

?Type("aCity[1]") 

Restituisce: "C" per Carattere, "N" per Numerico, ecc. (Vedete il manuale di riferimento al linguaggio per maggiori informazioni ).

EMPTY() 

Questa funzione può essere usata sugli elementi di un array per determinare se loro sono veramente vuoti (indefinito), o contengono il valore logico "falso". 

Perché questo é importante? 

Visual dBase mostra falso sia ovviamente, se l'elemento contiene il valore logico falso, sia se all'elemento non è stato assegnato alcun valore. Vi rendete conto che questa situazione può confondere un po'. Quindi, per vedere se un elemento dell'array contiene effettivamente il valore falso oppure non contiene nulla possiamo utilizzare: 

//controlla se l'elemento dell'array non è vuoto e contiene il valore falso 
if aCity[1] == false and not empty(aCity[1]) 

Per vedere se l'elemento è vuoto 

if empty(aCity[1]) 


Ok, Adesso ho le basi, dove posso ottenere maggiori informazioni? 

Provate a leggere ARRAY2.HTM (nello stesso file .zip). Controllate anche nella guida in linea e nel manuale di riferimento al linguaggio. Oltre a quello che è trattato in questi documenti .HTM (ARRAY1 ed ARRAY2) esistono: gli  Array sparsi e gli Array Associativi. Non sono stati trattati per motivi di spazio, probabilmente in un secondo tempo dedicheremo un How To specifico, comunque, potete trovare maggiori informazioni su questi argomenti nella guida in linea  nel manuale di riferimento al linguaggio. 


AVVISO: l'autore è un membro del dBVIPS (dBASE Volunteer Internet Peer Support). Un gruppo di volontari che offrono assistenza tecnica per dBase, Inc. sul newsgroups di Visual dBase (news.dbase2000.com). Se avete domande che riguardano questo documento, o su Visual dBase potete comunicare direttamente con l'autore e i dBVIPS nel newsgroups.   Attualmente non è offerta assistenza tecnica "privata" tramite E-mail privato dai membri del dBVIPS. 
I file How sono creati come servizio gratuito dai membri del dBVIPS per aiutare gli utenti ad imparare ad usare più efficacemente Visual dBase. Questi documenti sono redatti dai membri del dBVIPS e dall'Assistenza Tecnica di dBase Inc. (per assicurare qualità). Questo file How To  non può essere affisso altrove senza il permesso esplicito dell'autore che trattiene tutti i diritti sul documento. 

Copyright 1999, Kenneth J. Mayer. All rights reserved. 

EoHT: ARRAY1.HTM -- 10/28/1998 -- KJM