LEGGERE PARTI O IL FILE INTERO
Primo passo: utilizzo di Input e Open For Input.In questo
passo spiegheremo come attingere del testo da un file. Per prima cosa
abbiamo bisogno di un file su cui provare: con notepad (il Blocco Note)
creiamo un file e scriviamo al suo interno una decina di righe con
differenti, infine salviamolo come "C:\Prova.txt". Ora
generiamo un nuovo progetto di Visual Basic EXE Standard e
chiamiamolo "Dati_da_file".
Per il form che si creerà automaticamente mettiamo come proprietà Name "Step1". Nel form
Step1
inseriamo una RichTextBox. Se non è presente nella casella degli strumenti, dal menu progetto
selezioniamo la voce componenti e individuato cercate nella lista "Microsoft Rich Text
Box Control 6.0" o qualcosa di simile e aggiungiamo un segno di spunta a
fianco; premendo OK dovrebbe apparire una nuova icona
nella barra degli strumenti, quello è il controllo RichTextBox, simile a una normale casella di testo ma
con diverse funzionalità aggiuntive. Chiamiamola Posizione, svuotiamo la proprietà
Text: e impostiamo ScrollBars su 2 (verticali).
Facendo doppio click sullo sfondo del form Step1 si aprirà la sub Form_Load (che
viene richiamata quando viene la finestra ha completato il suo caricamento cioè all'avvio
del programma). In
questa sub scriviamo: Posizione.LoadFile "C:\Prova.txt"
La funzione LoadFile della RichTextBox Posizione apre il file specificato (C:\Prova.txt) e lo visualizza. Provando ad
eseguire il progetto ci accorgeremo che il testo del file è apparso nella
casella di testo; sebbene questo sia un metodo semplice e veloce non è affatto
il più efficace: passiamo dunque a vedere come si può avere un maggiore
controllo sull'accesso al file. Eliminiamo tutto il codice scritto finora (ma
lasciamo la RichTextBox) e aggiungiamo qualche altro controllo:
- TextBox:
- Name: Risultato
- Text: (nulla)
- ScrollBars: 2 (verticali)
- Multiline: True
- Utilità: in essa scriveremo ogni riga presa dal
file.
- Button
- Name: OpenClose
- Caption: Apri
- Enabled: False
- Utilità: prima di poter accedere a
un file è necessario aprirlo e chiuderlo quando
si ha concluso il suo utilizzo.
- Button
- Name: Inpt (non
Input)
- Caption: Input
- Utilità: premendo questo pulsante si
leggeranno il numero di righe specificato in NumRighe
o tutte se Tutto è selezionato.
- TextBox
- Name: NumRighe
- Caption: 1
- Utilità: qui viene specificato il numero di
righe che verrano lette premendo Inpt
(questa casella non avrà effetto se Tutto
è selezionato)
- CheckBox
- Name: Tutto
- Caption: Tutto
- Value: 0 (unchecked)
- Utilità: se selezionato, al premere
di Inpt verrà letto l'intero
file e riportato in Risultato
- CheckBox
- Name: Linea
- Caption: Line Input
- Value: 1 (checked)
- Utilità: normalmente se leggendo un
file il programma incontra una virgola la
funzione Input legge solo fino
ad essa e solo con un altra istruzione Input
si leggerà il resto della riga a meno che non vi
siano altre virgole, invece selezionado questa
casella si acquisirà l'intera riga senza
esclusioni.
- Label
- Name: TotInput
- Caption: Input
eseguiti: 0
- Utilità: aggiungeremo uno a
questo testo ogni volta che si premerà Inpt
per vedere il numero di righe totale acquisite.
- TextBox
- Name: OpenFile
- Text: C:\Prova.txt
- Utilità: qui potremo specificare un
file alternativo al quale accedere.
Ora dichiariamo una variabile a livello globale che ci servirà per tenere
conto del numero di accessi che eseguiremo sul file: Dim TotInp As Long
Inizialmente il file sarà chiuso e dovremo quindi premere su
OpenClose per
cominciare ad eseguire le operazioni di lettura. Dunque vediamo di
scrivere il codice per quando si clicca sul bottone Apri/Chiudi;
una volta arrivati in fondo al file (EOF(1)=True)
è necessario chiudere il file per poi aprirne un altro o sempre lo
stesso: premendo su OpenClose (se
ha come testo "Chiudi"),
chiuderà il file attraverso l'istruzione Close permettendoci di aprirne un altro. Una volta chiuso il file
cambieremo il testo del pulsante in "Apri"
e cliccandoci si aprirà il file specificato in OpenFile:
Private Sub OpenClose_Click()
If OpenClose.Caption = "Chiudi" Then
Close #1
Inpt.Enabled = False
Posizione.Text = ""
OpenClose.Caption = "Apri"
TotInp = 0
TotInput.Caption = ""
Risultato.Text = ""
Else
Posizione.LoadFile OpenFile.Text
Open OpenFile.Text For Input As #1
Inpt.Enabled = True
OpenClose.Caption = "Chiudi"
End If
End Sub
-
Private Sub OpenClose_Click(): indica la
routine OpenClose_Click che si genera
quando si preme su OpenClose.
-
If OpenClose.Caption = "Chiudi" Then:
apre un blocco If la cui condizione è
se il testo del pulsante OpenClose è "Chiudi"
o no.
-
Close #1: chiude il file #1
precedentemente aperto con l'istruzione Open.
-
Inpt.Enabled = False: disabilità il
pulsante Inpt perchè se non ci sono
file aperti non si può leggere nulla.
-
Posizione.Text = "": svuota il
testo di Posizione
-
OpenClose.Caption = "Apri":
cambia il testo del bottone OpenClose in
"Apri".
-
TotInp = 0: azzera la variabile che
tiene il conto degli Input eseguiti.
-
TotInput.Caption = "":
cancella il testo di TotInput.
-
Risultato.Text = "": cancella
il testo di Risultato.
-
Else: se il la condizione OpenClose.Caption
= "Chiudi" non
è vera (quindi il testo del bottone è "Apri")
al posto che eseguire le istruzioni qui sopra il blocco If
esegue quelle tra Else e End If.
-
Posizione.LoadFile OpenFile.Text: apre
il file specificato OpenFile nella
RichTextBox Posizione.
-
Open OpenFile.Text For Input As #1: apre
il file specificato in OpenFile per
essere letto e lo identifica come file #1.
-
Inpt.Enabled = True: riabilita il
pulsante Inpt, precedentemente
disattivato premendo su OpenClose quando
il suo testo era "Chiudi".
-
OpenClose.Caption = "Chiudi":
cambia il testo del pulsante OpenClose
in "Chiudi".
-
End If: chiude il blocco If.
-
End Sub: chiude la sub OpenClose_Click.
L'istruzione Open ci permette di utilizzare
la funzione Input sul file specificato che verrà
aperto per Input (quindi per leggerlo) e
identificato come #1.
Ora dobbiamo fare in modo che premendo sul bottone Inpt si
leggano dal file il numero di righe specificato in NumRighe
o tutte se Tutto è selezionato, e poi metterle
in Risultato:
Private Sub Inpt_Click()
Dim Prendi As String
Dim C1 As Integer
If Tutto.Value = 0 Then
For C1 = 1 To NumRighe
If Linea.Value Then Line Input #1, Prendi Else Input #1, Prendi
Risultato.Text = Risultato.Text & Prendi & vbCrLf
TotInp = TotInp + 1
Next C1
Else
Do Until EOF(1)
If Linea.Value Then Line Input #1, Prendi Else Input #1, Prendi
Risultato.Text = Risultato.Text & Prendi & vbCrLf
TotInp = TotInp + 1
Loop
End If
TotInput.Caption = "Input eseguiti: " & TotInp
If EOF(1) Then
TotInput.Caption = "Input eseguiti: " & TotInp & " [Il file è finito]"
Inpt.Enabled = False
End If
End Sub
Analizziamo ogni istruzione:
-
Private Sub Inpt_Click(): indica la sub
routine Inpt_Click che viene generata
quando si clicca sul bottone Inpt.
-
Dim Prendi As String: dichiara come
stringa la variabile Prendi nella quale
metteremo il testo letto ogni volta dal file.
-
Dim C1 As Integer: dichiara come numero
Integer (da -32.768 a 32.767) che servirà da contatore
per il ciclo più avanti.
-
If Tutto.Value = 0 Then: apre unn blocco If la cui condizione è se
Tutto
non è selezionato (Tutto.Value=False).
-
For C1 = 1 To NumRighe: inizia un ciclo
che si ripete per un numero numero di volte pari a quello
specificato in NumRighe. In questo ciclo
leggeremo dal file una riga alla volta e la accoderemo (aggiungeremo
a quello che c'è già), il tutto ripetuto per il
numero in NumRighe.Text.
-
If Linea.Value Then Line Input #1, Prendi Else
Input #1, Prendi: se Linea è
selezionato esegue Line Input #1, Prendi,
cioè legge dal file un intera riga senza eccezzioni,
mentre se Linea non è selezionato
esegue un semplice Input #1, Prendi che
ha le differenze di cui abbiamo parlato prima creando Linea.
-
Risultato.Text = Risultato.Text & Prendi
& vbCrLf: modifica il testo di Risultato in
quello che già c'era scritto (Risultato.Text)
più e il testo appena letto dal file (&
Prendi) infine i due caratteri di
ritorno a capo (& vbCrLf).
-
TotInp = TotInp + 1: aggiunge uno alla
variabile TotInp che tiene il conto
degli Input eseguiti.
-
Next C1: indica la fine del blocco-ciclo
C1 e se il ciclo non è finito fa
continuare l'esecuzione da For C1 = 1 To NumRighe.
-
Else: se il la condizione Tutto.Value=False
non è vera (quindi Tutto non è
selezionato) al posto che eseguire le istruzioni qui
sopra il blocco If esegue quelle tra Else
e End If.
-
Do Until EOF(1): inizia un ciclo che si
ripete fino a che EOF(1) (cioè fino a
che non si è arrivati in fondo al file #1
a leggere) non è vera, il ciclo si ripete o finisce con Loop.
-
If Linea.Value Then Line Input #1, Prendi Else
Input #1, Prendi: se Linea è
selezionato esegue Line Input #1, Prendi,
cioè legge dal file un intera riga senza eccezioni,
mentre se Linea non è selezionato
esegue un semplice Input #1, Prendi che
ha le differenze di cui abbiamo parlato prima creando Linea.
-
Risultato.Text = Risultato.Text & Prendi
& vbCrLf: modifica il testo di Risultato in
quello che già c'era scritto (Risultato.Text)
più e il testo appena letto dal file (&
Prendi) infine i due caratteri di
ritorno a capo (& vbCrLf).
-
TotInp = TotInp + 1: aggiunge uno alla
variabile TotInp che tiene il conto
degli Input eseguiti.
-
Loop: come spiegato in Do Until
EOF(1).
-
End If: segna la fine del blocco If
con condizione Tutto.Value=False.
-
TotInput.Caption: "Input eseguiti: "
& TotInp = cambia il testo di TotInput
nel numero di Input eseguiti che è
scritto in TotInp.
-
If EOF(1) Then: inizia un blocco If
la cui condizione è se si è giunti alla fine del file o
meno.
-
TotInput.Caption: "Input eseguiti: "
& TotInp & " [Il file è finito]"
= se è vera la condizione sopraccitata aggiunge in fondo
a TotInput "[Il file è finito]
"...
-
Inpt.Enabled: False =
...e disabilità il pulsante Inpt.
-
End If: chiude il blocco If.
-
End Sub: segna la fine della routine Inpt_Click.
Per aprire un file diverso da C:\Prova.txt è sufficiente specificarlo in
OpenFile.
|