- ] Thanks to VeNoM00 [ -

     

.

01011010001010101101111001011010101011011110110101011011001001
01011010001010101101111001011010101011011110110101011011001001
01011010001010101101111001011010101011011110110101011011001001

.


-- INDICE:-- ----Inviaci una E-Mail



Ricavare e impostare le proprietà di altri programmi

COSA VI SERVIRA': Microsoft Visual Basic 6 (la versione Learning dovrebbe bastare) - Possibilmente MSDN (Microsoft Devoloper Network) - Notepad (Blocco Note) - Progetti originali (non strettamente necessari) - Conoscenze estremamente basiche di VB

Bene, in questa lezione impareremo a leggere (step 1-3) e scrivere dati su un file in due modi: come testo (step 1-2) o come dati binari (step 3-4).

Step 1

In questo step vi spiegherò come attingere del testo da un file. Per prima cosa abbiamo bisogno di un file su cui provare; creiamolo aprendo notepad (blocco note), scrivete una decina di righe diverse e salvatelo come "C:\Prova.txt".Ora creiamo un nuovo progetto di Visual Basic EXE Standard. Chiamiamo il progetto "Dati_da_file" e il form che si è creato automaticamente "Step1" (proprietà Name). Nel form Step1 inseriamo una RichTextBox (se non lo trovate, dal menu progetto selezionate la voce componenti, cercate nella lista "Microsoft Rich Text Box Control 6.0" o qualcosa di simile e selezionatelo. Premendo OK dovrebbe apparire una nuova icona nella barra degli strumenti, quello è il controllo RichTextBox che simile a una normale casella di testo ma ha delle funzioni in più) e chiamiamola Posizione (Text: (nulla); ScrollBars: 2 (verticali)). Facendo doppio click sullo sfondo del form Step1 si aprirà la routine Form_Load (che viene generato quando viene caricata la finestra cioè all'avvio). In questa sub scrivete quanto segue:

Posizione.LoadFile "C:\Prova.txt"

La funzione LoadFile della RichTextBox Posizione apre il file specificato (C:\Prova.txt) e lo visualizza. Già fatto?!? No cari miei, questa funzione ci permette solo di visualizzare il testo ma non di prenderne una sola riga e così via, quindi la casella di testo Posizione ci servirà solo per vedere a che punto siamo nel file nell'operazione di lettura riga per riga, ma questo lo vedremo più avanti.
Ora 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: Chiudi
    • 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.

Perfetto ora dobbiamo fare sì che all'avvio del programma venga aperto per default il file C:\Prova.txt, a aiggiungiamo quindi in Form_Load:

Open "C:\Prova.txt" For Input As #1

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 dichiariamo nella sezione (dichiarazioni) la variabile TotInp che ci servirà per tenere il conto degli Input eseguiti.
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 Not Tutto.Value 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 Not Tutto.Value 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): inzia 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 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.

  • 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 sopracitata 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.

Ora occupiamoci del bottone OpenClose, una volta arrivati in fondo al file (EOF(1)=True) è necessario chiudere il file per poi aprirne un altro o sempre lo stesso; come? Premendo su OpenClose (se ha come testo "Chiudi"), esso con l'istruzione Close chiuderà il file 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 disattavato 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.

Per aprire un file diverso da C:\Prova.txt basta scriverlo in OpenFile.

Ecco il codice dello Step1:

Option Explicit
Dim TotInp As Long

Private Sub Form_Load()
Posizione.LoadFile "C:\Prova.txt"
Open "C:\Prova.txt" For Input As #1
End Sub

Private Sub Inpt_Click()
Dim Prendi As String
Dim C1 As Integer
If Not Tutto.Value = 1 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

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

_ <___> _
/|\_/WhO\_/|\
||||VeNoM00||||
|/\/ |iS?| \/\|
|/ \|



TORNA INDIETRO