- ] Thanks to VeNoM00 [ -

     

.

01011010001010101101111001011010101011011110110101011011001001
01011010001010101101111001011010101011011110110101011011001001
01011010001010101101111001011010101011011110110101011011001001

.


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



Leggere o scrivere dati su file

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 3

Nel terzo step, come abbiamo già fatto nello Step1, leggeremo dei dati da un file ma, al contrario del primo step, in modalità binaria. Le differenze sono poche e perciò non mi dilungherò molto. Il codice è pressochè identico allo Step1 perciò andate a rivederlo e modificatelo opportunamente.
Per prima cosa rimuovete i controlli Tutto, Linea, NumRighe e TotInput che tanto non ci servono più. Aggingiamo due TextBox:

  • TextBox:

    • Name: Start

    • Caption: "1"

    • Utilità: qui specificheremo il byte (ovvero il carattere) dal quale inizierà la lettura

  • TextBox:

    • Name: NumChar

    • Caption: "10"

    • Utilità: qui specificheremo il numero di byte(ovvero caratteri) che dovranno essere restituiti

Fatto questo non ci resta che modificare due routine: Form_Load e Inpt_Click.
Per Form_load dobbiamo solo sostituire la riga...

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

con...

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

Abbiamo semplicemente cambiato la modalità di accesso al file da Input a Binary. Il codice di Form_Load risulterà quindi:

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

Invece Inpt_Click deve essere completamente sostituito con:

Private Sub Inpt_Click()
Dim Buffer As String
Buffer = String(CLng(NumChar.Text), Chr(1))
Get #1, Start.Text, Buffer
Risultato.Text = Left(Buffer, IIf(InStr(1, Buffer, Chr(1)) > 0, InStr(1, Buffer, Chr(1)), Len(Buffer)))
End Sub

  • Private Sub Inpt_Click(): dichiara l'inizio della routine Inpt_Click.

  • Dim Buffer As String: dichiara la varibile Buffer come stringa (di testo), in questa varibile verrà scritto il testo preso dal file #1 con l'istruzione Get.

  • Buffer = String(NumChar.Text, Chr(1)): imposta la varibile Buffer su una stringa composta dalla ripetizione di Chr(1) (carattere qualunque) per la cifra specificata in NumChar; questi caratteri verrano sostituiti dal testo preso dal file #1 con l'istruzione Get.

  • Get #1, Start.Text, Buffer: ricava dal file #1 una stringa che inizia dal byte specificato in Start per la lunghezza della variabile Buffer, e la mette in Buffer.

  • Risultato.Text = Risultato.Text & Left(Buffer, IIf(InStr(1, Buffer, Chr(1)) > 0, InStr(1, Buffer, Chr(1)), Len(Buffer))): cambia il testo di Risultato nel suo testo corrente più la parte a sinistra della stringa Buffer per tutta la sua lunghezza (quindi l'intera stringa) se in Buffer non ci sono Chr(1) (e quindi non si è andati oltre la fine del file nella lettura) altrimenti fino al primo Chr(1) presente in Buffer.

  • End Sub: chiude la sub.

Eccovi il codice per intero del terzo step:

Option Explicit

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

Private Sub Inpt_Click()
Dim Buffer As String
Buffer = String(NumChar.Text, Chr(1))
Get #1, Start.Text, Buffer
Risultato.Text = Risultato.Text & Left(Buffer, IIf(InStr(1, Buffer, Chr(1)) > 0, InStr(1, Buffer, Chr(1)), Len(Buffer)))
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