- Aprire e leggere file in VB6 (passo 1) -
 
COSA SERVE PER QUESTO TUTORIAL
Download | Chiedi sul FORUM | Glossario Microsoft Visual Basic 6 (la versione Learning dovrebbe bastare) - Possibilmente MSDN (Microsoft Devoloper Network) - Notepad (Blocco Note) - Progetti originali (non strettamente necessari) - Conoscenze basiche di VB
Leggere dati con Input in modalità testo

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.

 

<< INDIETRO by VeNoM00