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:

  1. Sequenziale
  2. Casuale
  3. Binario

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.

TORNA INDIETRO