|
LAVORARE
CON I FILES
Quando il Basic venne inventato la
sola maniera per salvare i dati per poterli recuperare
successivamente, era quella di memorizzarli in file: adesso ci sono i
database che permettono una gestione più versatile e
organizzata. Vb utilizza 3 tipi di file: sequenziali, random e binari. Un file sequenziale é in file dove la
lettura e la scrittura avvengono scorrendo per intero tutti i
caratteri presenti, come si trattasse di un nastro magnetico. Per
accedere ad una informazione, devo scorrere tutte le precedenti fino
a quella desiderata . Random significa che il file é
organizzato in righe della stessa lunghezza detti record: ogni record contiene le informazione
relative ad un cliente o ad un prodotto per esempio. La lettura
può avvenire sia sequenzialmente sia indicando il numero
record cui accedere. Un file binario a differenza dei 2 precedenti,
può contenere qualsiasi tipo di dato e non necessariamente
caratteri alfanumerici. Per usare un file, a prescindere del tipo di
elaborazione del tipo file, bisogna usare una sequenza di azioni ben
definite:
- scelta del file
- assegnazione di un numero
file
- apertura file
- processare i dati
- chiudere file
SCELTA
DEL FILE
Il modo migliore per farlo é
quello di usare il control Common Dialog impostato per
lutilizzo dei file. Altra modo é quello di assegnare
direttamente il nome del file nella OPEN per lapertura. Esempio
di apertura con
- Common Dialog
dialog1.filter = File dati (*.dat)|*.dat
finestra di dialog che visualizza
solo i file con suffisso .dat
- dialog1.showOpen
-
- mostra finestra di dialogo
- nomeFile =
dialog1.Filename
restituisce il nome file
scelto
- if nomeFile =
then se
nome file vuoto
- Exit sub esci
- else
- Operazioni
di apertura
- elabora file
- end
if
ASSEGNAZIONE
DI UN NUMERO FILE
Avviene sia usando listruzione
FreeFile sia assegnando un numero compreso tra 1 e 256; naturalmente
il numero non deve essere già in uso per un altro file;
FreeFile garantisce lunicità del numero. Esempio:
- nrofile =
FreeFile
OPEN,
CLOSE
OPEN apre un file per la
sua elaborazione: il verbo aprire sta a significare che
il file é disponbile alla lettura o scrittura o entrambe le
cose. Quando un file é aperto e la sua elaborazione é
terminata, si deve chiuderlo con listruzione CLOSE.
Listruzione OPEN
- Open nomeFile
- [For modalita ]
- [Access accesso ] [blocca ]
- As [# ]numerofile
- [len
= lunghezza ]
nomeFile = nome del file da elaborare
modalita = tipo di elaborazione: questi
sono i valori possibili:
Input |
sequenziale in
lettura |
Ouput |
sequenziale in
scrittura |
Append |
come per Output ma la
scrittura inizia alla fine del file aperto, senza
cancellarlo |
Random |
random |
Binary |
binario: in questo caso ha
senso la parola Access che indica il tipo di accesso per un
file binario. |
I valori di access sono:
read |
lettura |
write |
scrittura |
readwrite |
lettura e scrittura |
blocca indica quanti dati
devono essere portati nella memoria ad ogni lettura fisica del
file
numerofile é un numero
intero che deve essere assegnato al file; ogni elaborazione relativa
ad un file deve avere il numero file lunghezza
si usa solo nel caso di file random e
serve ad indicare la lunghezza d i un record Esempi di Open
Sequenziale
- Open nomeFile
For Input as 1
- Open nomeFile
For Output as 1
- Open nomeFile
For Append as 1
Binario
- Open nomeFile
For Binary Access Read as nroFile
Esempi di chiusura con CLOSE
- Close 1
- Close
nroFile
ELABORAZIONE
DEI FILE
Le principali istruzioni che si usano
con i file sono quelle di lettura e di scrittura. Le istruzioni di
lettura sono
- Input
#
legge dati da un file
sequenziale
- Line Input
#
legge dati da un file fino a quando
incontra un carattere di carriage return, cioé legge un record
intero
- Input()
legge n byte da un file
- Get
#
legge da un file binario
- Input #
nroFile, nome, cognome
legge nome e cognome del file. Nome e
cognome sono stringhe
- Line Input #
nroFile, anagrafica
legge una riga anagrafica dal file.
anagrafica é una stringa che a sua volta contiene altri tipi
di dati caratteri =
- Input(25,nroFile)
legge 25 caratteri dal file.
caratteri é una stringa di caratteri lunga 25 byte.
- dim x1 as
integer
- get nrofile, ,
x1
legge un numero intero da un file
binario; lo spazio in bianco tra le due virgole, indica la posizione
allintero del file; se non indicata come in questo caso
significa che la lettura avviene nella posizione successiva a quella
precedente. Le istruzion i di scrittura sono:
- Write
#
- Print #
- Put #
Lunica differenza consiste che
Write inserisce virgole tra gli elementi e delimita le stringhe con
doppi apici. Put invece scrive in un file binario. Esempi di
scrittura:
- Write #
nrofile, Nome, Cognome
scrive tra virgole e doppi
apici
- Print #
nrofile, Nome, Cognome
scrive senza virgole e doppi
apici
- Print #
nrofile, Nome; Cognome
il simbolo ; indica che Nome verrà scritto attaccato a Cognome ; con la
virgola i 2 dati sono separati da Tab o separatore.
- dim x1 as
integer put nrofile, , x1
scrive un numero intero da un file
binario Esempio: lettura di un file sequenziale
- dialog1.filter
= File dati (*.dat)|*.dat
- dialog1.showOpen
- nomeFile =
dialog1.Filename
- if nomeFile
<> then
- nrofile =
freefile
- Open
nomeFile for Input as nroFile
- do while not
EOF(nrofile)
- line
input # nrofile, valore
- combo1.Additem
valore
- loop
- close
nroFile
- end
if
FUNZIONI
PER I FILE
Esistono varie funzioni legate ai
file: una labbiamo già vista ed é FreeFile . Unaltra é nel listato precedente EOF (nroFile) e restituisce True
quando sincontra la fine del file. Ecco le altre:
- Lof (nroFile) ritorna la
dimensione del file aperto. Esempio:
- dim lungFile as
Long
- lungFile =
Lof(nroFile)
Seek nroFile,
nroByte
Seek (nrofile) Nel
primo caso il puntatore al file si posiziona nel byte nroByte del
file senza compiere nessuna elaborazione. Nel secondo caso
restituisce la posizione del puntatore. Esempi:
- Seek nroFile,
250
posiziona il puntatore al byte
250
- dim pointer as
long
- pointer =
Seek(nrofile)
scrive in pointer la posizione
attuale del puntatore nel file
FileCopy sorgente,
destinazione
Copia il file sorgente in un nuovo
file destinazione; il file sorgente non deve essere aperto.
Esempio
- FileCopy
prodotti.dat,nuovi.dat
Dir [percorso][attributi] Restituisce il nome di un file
o di una directory esistente che soddisfa i requisiti, se ci sono,
negli attributi. Questa funzione restituisce un valore alla volta.
E preferibile usare i control DriveBox, DirBox e FileBox.
Percorso contiene i caratteri di ricerca tipici del Dos come *.BAS
Attributi può contenere i valori degli attributi dei file.
Ecco una tabella esplicativa sugli attributi.

Esempio: ricerca tutti i file con
suffisso *.DAT e li carica in una listbox
- tipoFile =
*.DAT
- list1.Clear
fileName = dir (tipoFile) estrai il
primo file con suffisso *.DAT
- if
len(fileName) > 0 then controlla
se esiste almeno un file
- do se
esiste
- list1.Additem
fileName aggiunge
alla listbox il nome trovato
- fileName
= dir legge
un altro file con dir
- loop until
len(fileName) = 0 ripete
il test di esistenza del file
- else
- msgbox
File non trovato
- end
if
Kill nomeFile Attenzione: cancella
nomeFile dalla directory.
Esempio: cancella tutti file con
suffisso *.DAT
- tipoFile =
*.DAT
- kill
tipoFile
DataRegion
|