Guide e Tutorials:indexed | |||||||||||||||||||||||||||
Studio sui file binari (Seconda parte) - lettura e scrittura di tipi di dati definiti dall'utente Come già si è visto nel corso dell'articolo precedente i file binari sono speciali formati di file per poter essere utilizzati. Il formato infatti non prevede un codice ASCII che quindi necessita di un'interpretazione da parte dell'applicazione. I procedimenti di lettura e di scrittura di valori numerici e testuali all'interno di questo tipo di file dovrebbe essere ormai chiara. In realtà questi file vengono utilizzati per immagazzinare ed archiviare più che altro immagini, suoni, ed altri formati di dimensioni piuttosto ingombranti. In particolare l'uso di file binari nel processo di memorizzazione dei dati è importante nel caso in cui si abbia a che fare con tipi di dati definiti dall'utente. Per chiarire il concetto di tipo definito dall'utente, leggere l'articolo Le API: approfondimenti sul concetto di struttura: tipi definiti dall'utente. S'immagini di avere una struttura da noi creata del tipo:
e di voler costruire una matrice che contiene tutti i dati (nome, cognome, ditta, codice) per ogni cliente. Chiamiamo tale matrice matrClienti:
attraverso i file binari è molto semplice andare a salvare ogni elemento della matrice. Dopo aver inserito la struttura e la dichiarazione della matrice nelle dichiarazioni generali del modulo di codice, è necessario definire gli elementi della matrice ossia i clienti. Nella routine Form_Load ridimensioniamo la matrice in modo che contenga due elementi ossia due clienti:
Adesso ci possiamo occupare del primo cliente. Definiamone i dati:
il secondo cliente invece è caratterizzato dalle seguenti informazioni:
e richiamiamo la routine che ci consente di salvare i dati in un file binario:
Adesso nella routine Salva dichiariamo le variabili che interverranno nel codice ossia il numero di file numeroFile, un contatore i che scorre tutti i clienti e il totale dei clienti considerati numeroClienti che al momento del salvataggio sappiamo essere due, ma ci è sconosciuto nel momento dell'apertura del file binario:
come visto nell'articolo precedente adesso è necessario aprire il file binario per accesso binario con le modalità già analizzate in precedenza:
assegnamo a numeroClienti il massimo valore della matrice tramite la funzione UBound seguita dal nome della matrice. Essendo composta da due elementi, numeroClienti sarà proprio due. Fatto ciò possiamo salvare questo valore nel file binario. Tale operazione è fondamentale al momento dell'apertura del file per individuare il numero di dati che è necessario recuperare:
adesso per ogni cliente (qui finalmente usiamo la variabile i che rappresenta un contatore che scorre i vari clienti) salviamone le caratteristiche individuate dai tipi di dati da noi definiti nella struttura:
e finalmente chiudiamo il file e la sottoprocedura:
Ora ci dobbiamo occupare di recuperare i dati in lettura. Per far ciò aggiungiamo un pulsante denominato Command1 al piano. Il ragionamento è molto semplice: prima di tutto si recupera il numero di clienti salvati sul file (nel nostro caso 2, ma ancora in teoria questa informazione non si conosce). In secondo luogo per ogni cliente recuperiamo le variabili nome, cognome, ditta e codice e ripopoliamo la matrice. Innanzitutto dichiariamo le variabili ed apriamo il file in lettura:
recuperiamo come già detto il numero totale di clienti:
e per finire, se numeroClienti è un valore maggiore di 0 (ossia sono stati salvati i dati di almeno un cliente), ridimensioniamo la matrice e ripopoliamola con i dati relativi. Infine chiudiamo il file e la sottoprocedura:
Come mai è stata inserita l'istruzione Stop? Perchè è necessaria per sospendere l'esecuzione dell'applicazione per permettere di dare un'occhiata alle variabili del progetto. Proviamo infatti ad avviare l'applicazione: nella sottoprocedura Form_Load vengono definite le variabili, nella sottoprocedura Salva invece esse vengono salvate nel file binario. Una volta cliccato il pulsante le variabili vengono recuperate, l'applicazione si blocca e viene evidenziato in giallo l'istruzione Stop. Adesso proviamo ad aprire la finestra di visualizzazione delle variabili, scegliendo dal menu Visualizza di Visual Basic l'opzione Finestra Variabili Locali come mostrato sotto: Al di sotto dell'area di progettazione comparirà una finestra nella quale è possibile tenere sott'occhio le variabili del progetto. Espandere il nodo in corrispondenza di Me e cercare nella lista che compare il nome matrClienti: Espandere anche questo nodo: si vedrà che tutte le variabili sono ritornate al loro posto all'interno della matrice corrispondente dopo essere passate all'interno del file binario:
|