6. I file di testo
Un file di testo è un file contenente righe di testo. Esaminiamo la creazione e l’utilizzo di tali file attraverso alcuni esempi.
6.1. Creazione e utilizzo
Programma |
![]() |
Risultati |
Commenti
- la riga 7 crea un oggetto file di tipo "Scripting.FileSystemObject" tramite la funzione CreateObject("Scripting.FileSystemObject"). Tale oggetto consente l'accesso a qualsiasi file del sistema, non solo ai file di testo.
- La riga 9 crea un oggetto "TextStream". La creazione di questo oggetto è associata alla creazione del file testfile.txt. Questo file non è indicato da un nome assoluto del tipo c:\dir1\dir2\....\testfile.txt, ma da un nome relativo testfile.txt. Verrà quindi creato nella directory da cui verrà lanciato il comando di esecuzione del file.
- Il sistema di file di Windows non riconosce concetti quali «file di testo» o «file non di testo». Conosce solo i file. Spetta quindi al programma che utilizza questo file decidere se trattarlo come un file di testo o meno.
- La riga 9 crea un oggetto da cui deriva il comando set utilizzato per l’assegnazione. La creazione di un oggetto file di testo comporta la creazione di 2 oggetti:
- la creazione di un oggetto Scripting.FileSystemObject (riga 7)
- e successivamente la creazione di un oggetto «TextStream» (file di testo) tramite il metodo OpenTextFile dell’oggetto Scripting.FileSystemObject, che accetta diversi parametri:
- il nome del file da gestire (obbligatorio)
- la modalità di utilizzo del file. Si tratta di un numero intero con 3 possibili valori:
- 1: utilizzo del file in lettura
- 2: utilizzo del file in scrittura. Se il file non esiste già e se il terzo parametro è presente e ha valore true, viene creato; altrimenti no. Se esiste già, viene sovrascritto.
- 8: utilizzo del file in modalità aggiunta, c.a.d. Scrittura alla fine del file. Se il file non esiste già e se il terzo parametro è presente e ha valore true, viene creato; altrimenti no.
- La riga 11 scrive una riga di testo con il metodo WriteLine dell'oggetto TextStream creato.
- La riga 13 «chiude» il file. A questo punto non è più possibile né scrivere né leggere al suo interno.
- La riga 16 crea un nuovo oggetto "TextStream" per gestire lo stesso file di prima, ma questa volta in modalità "aggiunta". Le righe che verranno scritte saranno inserite dopo quelle esistenti.
- La riga 18 scrive due nuove righe, tenendo presente che la costante vbCRLF indica la fine di riga nei file di testo.
- La riga 20 chiude nuovamente il file
- la riga 23 lo riapre in modalità "lettura": si procederà alla lettura del contenuto del file.
- La riga 27 legge una riga di testo con il metodo ReadLine dell’oggetto TextStream. Quando il file è stato appena “aperto”, ci si trova sulla prima riga di testo dello stesso. Una volta che questa è stata letta dal metodo ReadLine, ci si posiziona sulla seconda riga. Pertanto, il metodo Readline non solo legge la riga corrente, ma “passa” automaticamente alla riga successiva.
- Per elaborare tutte le righe di testo, il metodo ReadLine deve essere applicato ripetutamente all’interno di un ciclo. Il ciclo (riga 26) termina quando l’attributo AtEndOfStream dell’oggetto TextStream assume il valore true. Ciò significa che non ci sono più righe da leggere nel file.
6.2. I casi di errore
Si verificano due casi di errore frequenti:
- apertura in lettura di un file che non esiste
- apertura in scrittura o aggiunta di un file inesistente con il terzo parametro impostato su false nella chiamata al metodo OpenTextFile.
Il programma seguente mostra come rilevare questi errori:
6.3. L'applicazione IMPOTS con un file di testo
Riprendiamo l'applicazione per il calcolo delle imposte supponendo che i dati necessari al calcolo siano contenuti in un file di testo denominato data.txt:
12620 13190 15640 24740 31810 39970 48360 55790 92970 127860 151250 172040 195000 0
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5 0,55 0,6 0,65
0 631 1290,5 2072,5 3309,5 4900 6898,5 9316,5 12106 16754,5 23147,5 30710 39312 49062
Le tre righe contengono rispettivamente i dati delle tabelle limite coeffR e coeffN dell’applicazione. Grazie alla modularizzazione della nostra applicazione, le modifiche riguardano essenzialmente la procedura getData incaricata di costruire le tre tabelle. Il nuovo programma è il seguente:
Programma |
|
Note:
- nel file di testo data.txt, i valori possono essere separati da uno o più spazi, il che rende impossibile utilizzare la funzione split per estrarre i valori dalla riga. È stato necessario ricorrere a un'espressione regolare
- la funzione getData restituisce, oltre ai tre array di limiti (coeffR, coeffN), un risultato che indica se si è verificato o meno un errore. Questo risultato è un array di due elementi. Il primo elemento è un codice di errore (0 se non c’è stato alcun errore), il secondo è il messaggio di errore se si è verificato un errore.
- La funzione getData non verifica la validità dei valori presenti nel file data.txt. In una situazione reale, dovrebbe farlo.
