La
gestione dei files
Postando sui vari N.G. ho notato che molte persone sanno come accedere ad un database con le svariate tecnologie che esistono ma hanno difficoltà nella gestione di files in maniera diretta.
Questo articolo quindi ha come scopo quello di chiarire in maniera completa i dubbi sorti ai programmatori VB.
Gli accessi ai files possono essere di tre tipi:
Solitamente ognuno di questi accessi è utile per un determinato tipo di file:
Per poter accedere ad un file diverso da un DBMS c'è una precisa
sintassi
da seguire:
Dim NomeLogico
As Integer
Dim NomeFile
As String
Queste righe servono
per l'appunto a dichiarare un nome logico (che è un numero intero compreso
tra 0 e 512) ed il nome effettivo del file (es. "c:\documenti\MioFile.txt").
Per definire un nome logico bisogna utilizzare
la funzione FreeFile come segue:
NomeLogico = FreeFile
Bisogna ricordarsi che ad
ogni apertura del file c'è bisogno di assegnare al nome logico il valore
della funzione FreeFile che restituirà un valore compreso tra
1 e 512 (che è definito come Handle del file).
Come abbiamo detto in precedenza un file si può aprire in diversi modi:
Possiamo gestirlo come insieme di record di lunghezza fissa (Random
Access File - File ad Accesso Casuale)
Es.
Type
MioRecord
Nome As String * 10
' Deve essere dichiarata la
lunghezza
'
della stringa
Cognome As String * 20
End Type
Dim Persona As MioRecord
A questo punto si definisce l'apertura del file con lunghezza del record pari a
Persona:
Open NomeFile For Random As NomeLogico Len = Len(Persona)
L'operazione di lettura di un record da questo tipo di file è legata alla
funzione Get:
Get NomeLogico, 1, Persona
Questa funzione ritorna nella variabile
Persona il primo record del file.
Il valore 1 (che indica il record da leggere nel file) può anche essere omesso e la lettura sarà sequenziale partendo dal primo record presente
fino ad arrivare all'ultimo.
L'operazione di scrittura è la seguente
Put NomeLogico, 1, Persona
Questa funzione scriverà nel primo record del file il valore contenuto nella variabile
Persona
Anche quì il valore 1 può essere omesso come per la lettura prevedendo
che la scrittura sarà sequenziale partendo dal primo record del file.
ATTENZIONE!!!
Se si omette il
posizionamento del record nel file, e lo stesso già contiene degli
elementi, questi verranno svorascritti.
Per chiudere un file l'operazione è
Close NomeLogico
Questa operazione deve essere obbligatoria
alla fine di tutte le operazioni del file altrimenti si rischia di
allocare più handle fino ad arrivare all'esaurimento degli stessi e creando
di conseguenza delle situazioni sgradevoli quando si vuole cancellare o riaprire
il file!!!
Se al posto di avere dei record di tipo UDT(User Defined Type) si hanno in
un file dati di tipo intero, data o qualunque altro tipo bisogna definire
una variabile del tipo voluto ed aprire il file dando come lunghezza del
record la lunghezza della variabile definita in bytes.
Es.
Dim mioRecord As Integer
Open NomeFile For Random As NomeLogico Len = Len(mioRecord)
BISOGNA RICORDARE CHE PER UN FILE AD ACCESSO CASUALE (RANDOM FILE
ACCESS MODE) è obbligatorio definire la lunghezza del record!
Per aprire un file ad accesso sequenziale (SEQUENTIAL
FILE ACCESS MODE) la sintassi è simile a quella per un file ad accesso
CASUALE
Dim S As String '
Dichiaro una variabile di tipo string.
Open NomeFile For Input As NomeLogico ' Se devo fare
operazioni
' di lettura da file.
Open NomeFile For Output As NomeLogico ' Se devo fare
operazioni
' di scrittura nel file.
Line Input #NomeLogico, S ' Per leggere una stringa
conclusa dal
' carattere CRLF
Input #NomeLogico, S ' per leggere una stringa dal file
che ha come
' separatore da una successiva stringa il carattere
' ","
Write #NomeLogico, S ' Scrive nel file la stringa S
delimitata dalle
' virgolette es. Write #1,"Prova" nel file ritrovo
' la stringa "Prova"
Print #NomeLogico, S ' identico al Write solo che
come separatore di
' stringhe viene utilizzato il CRLF al posto delle
' virgolette.