4 elemente ale limbajului de programare visual basic



Yüklə 0,58 Mb.
səhifə8/9
tarix03.11.2017
ölçüsü0,58 Mb.
#29147
1   2   3   4   5   6   7   8   9

4.11.3. Închiderea fişierelor
Închiderea fişierelor se realizează cu comanda FileClose, a cărei sintaxă este:
FileClose [listă fişiere] sau altfel spus

FileClose( [ # numărFişier1] [, # numărFişier2] [, # numărFişier3…] )
Dacă lista fişierelor ce trebuie închise lipseşte, atunci toate fişierele deschise cu FileOpen care sunt active în mod curent vor fi închise.

Când se închid fişierele care au fost deschise în mod Append sau Output, toate datele aflate în zona tampon asociată fişierului vor fi scrise în fişier înaintea închiderii fişierului. Prin închiderea unui fişier cu FileClose asocierea dintre fişier şi numărul său dispare.

       

4.11.4. Comenzi pentru fişiere secvenţiale


Fişierele secvenţiale sunt în general şiruri de caractere, dar pot fi şi combinaţii de şiruri de caractere şi de numere. În general se pot folosi următoarele două instrucţiuni pentru a scrie date într-un fişier cu acces secvenţial:

a). Scrierea datelor într-un fişier secvenţial se poate face cu comenzile:
Print(NumărFişier, listă_expresii)

sau
Write( NumărFişier, listă_expresii)

unde:
listă_expresii
este o listă de variabile a căror valoare urmează să fie trecută în fişier.

Pentru a scrie o înregistrare goală, după număr fişier se precizează numai virgule.

Instrucţiunea WRITE este similară cu instrucţiunea PRINT , singura diferenţă între cele două instrucţiuni fiind că WRITE inserează virgule între termeni, şirurile de caractere sunt delimitate de ghilimele, iar numerele pozitive nu sunt precedate de spaţii.
Exemplu:
Fiind date două liste (una de nume şi corespunzător una de vârste) să se creeze un fişier secvenţial în care să se memoreze aceste date (numele şi vârsta fiecărui student).


Rezolvare:

Am proiectat forma şi am executat aplicaţia.


Codul sursă asociat evenimentului click al butonului de comandă Scrie în fişier este:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button1.Click

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis1.txt", OpenMode.Output)

PrintLine(nrF, "PRIMUL TEST DE SCRIS INTR-UN FISIER")

PrintLine(nrF, "LA DATA DE", TAB(20), CDate(Today()))

PrintLine(nrF, New String(CChar("_"), 35))

PrintLine(nrF, "NUME PRENUME", TAB(20), "VARSTA")

PrintLine(nrF, New String(CChar("_"), 35))

For I = 0 To Me.nume.Items.Count - 1

PrintLine(nrF, Me.nume.Items.Item(I), TAB(20), _

Me.varsta.Items.Item(I))

Next I

FileClose(nrF)

End Sub
Codul asociat evenimentului click al butonului Exit:

Private Sub Button2_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button2.Click

End

End Sub

Verificând pe disc, fişierul fis1.txt există:




Conţinutul fişierului creat se prezintă astfel:
PRIMUL TEST DE SCRIS INTR-UN FISIER

LA DATA DE 12.02.2010

___________________________________

NUME PRENUME VARSTA

___________________________________

Student 1 20

Student 2 22

Student 3 18

Student 4 22

Student 5 24

Student 6 20

b) Citirea informaţiilor din fişiere cu acces secvenţial

    Citirea informaţiilor din fişierele secvenţiale se face cu ajutorul instrucţiunilor:




Input(NumărFişier, ȘirCaractere)


LineInput(NmărFişier)
unde:
ŞirCaractere este o variabilă de tip String în care este preluată înregistrarea, ca şir de caractere;

LineInput returnează un șir de caractere

Citirea datelor dintr-un fişier binar se realizează într-un mod asemănător cu cel aleatoriu.


4.11.5. Alte funcţii pentru lucrul cu fişiere

În lucrul cu fişierele deosebit de importante sunt o serie de funcţii.

Funcţia Seek(NumărFişier) returnează ca valoare poziţia curentă de citire/scriere în cadrul uni fişier deschis cu instrucţiunea Open.

Funcţia LOF(NumărFişier) returnează mărimea fişierului exprimată în octeţi.

Funcţia EOF(NumărFişier) returneză valoarea logică True dacă s-a ajuns la sfârşitul unui fişier deschis în mod aleatoriu sau secvenţial şi False în caz contrar. Aceasta înseamnă că pentru a citi toate înregistrările de date dintr-un fişier ne vom folosi de testarea valorii acestei funcţii, într-o construcţie cum ar fi:

Exemplu:

Să se dezvolte aplicaţia anterioară şi să se completeze astfel încât, pe lângă crearea unui fişier secvenţial, să permită noi funcţiuni şi anume:



  • citirea şi vizualizarea datelor din fişierul creat;

  • adăugarea de noi înregistrări în fişier;

  • modificarea conţinutului unor înregistrări (selectate de utilizator);

  • ştergerea unor înregistrări care nu mai sunt de actualitate (selectate de utilizator).

Rezolvare:

Am proiectat forma, am prevăzut pentru fiecare dintre funcţiunile aplicaţiei câte un buton de comandă şi am scris codul sursă asociat acestora:


Executând aplicaţia se obţine:




Dacă se doreşte adăugarea de noi înregistrări în fişier, atunci se precedează astfel: se activează butonul de opţiuni ADAUGARE INREGISTRĂRI ÎN FIŞIER, se completează sus, în casetele de text datele (nume, vârstă) şi, pentru preluarea lor în listă se acţionează butonul ok.

După ce am preluat în listă datele studenţilor pe care vrem să-i adăugăm în fişier, acţionîm butonul SCRIE LISTA ÎN FIŞIER.

Vom vizualiza apoi datele existente în fişier acţionând butonul LISTEAZĂ.

Ca efect în lista din dreapta sunt afişate înregistrările existente acum în fişier, inclusiv cele adăugate.



Dacă se doreşte crearea din nou a fişierului cu elementele din listă, atunci se selectează opţiunea CREARE FIŞIER urmată de acţionarea butonului SCRIE LISTĂ ÎN FIŞIER. La acţionarea butonului LISTEAZĂ se vor vedea doar aceste înregistrări.



Se poate şterge apoi lista (din stânga) acţionând butonul STERGE LISTA.


Dacă se doreşte modificarea unei înregistrări din listă se procedează astfel:

  • se apasă butonul MODIFICARE ÎNREGISTRĂRI. Ca efect se deschide o nouă formă, Form2, în care conţinutul fişierului este trecut într-o listă. Utilizatorul selectează înregistrarea de modificat (al cărei conţinut se trece în caseta de text de deasupra listei) şi face modificările dorite.

Apăsând pe butonul ACCEPTA MODIFICARILE înregistrarea corectată trece din nou în listă şi se aşteaptă ca utilizatorul să efectueze, pe rând toate modificările dorite.


fisier%20ex26
Urmează apoi preluarea în fişier a înregistrărilor din listă, deci cu corecţiile efectuate, acţionând butonul SCRIE MODIFICĂRILE ÎN FIŞIER. Se afişează din nou forma 1, cu lista fără elemente. Dacă cerem din nou o listare a fişierului (opţiunea LISTEAZĂ) se va observa că toate corecţiile noastre au fost preluate în fişier.


Pentru a şterge o înregistrare se procedează în mod similar: se apasă butonul STERGERE ÎNREGISTRĂRI , se afişează o nouă formă (FORM3) cu conţinutul fişierului afişat în listă; se alege din listă înregistrarea dorită şi ca efect ea va fi dusă în caseta de text pentru confirmare cu butonul ACCEPTA STERGERE. apoi se apasă butonul RESCRIE FISIER.

Ca efect apare din nou forma principală, în care putem lista din nou conţinutul fişierului, pentru a ne convinge că ştergerea a fost efectuată..


Cu EXIT se iese din aplicaţie.

Codul sursă asociat controalelor din cadrul aplicaţiei se prezintă astfel:

FORM1

'Declaraţii

Dim A1 As String

Dim I1 As Integer


Private Sub Button6_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button6.Click

'Evenimentul click al butonului “Scrie în fişier”/ Form1



If Me.RadioButton1.Checked = True Then

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis1.txt", OpenMode.Output)

PrintLine(nrF, "PRIMUL TEST DE SCRIS INTR-UN FISIER")

PrintLine(nrF, "LA DATA DE", TAB(20), CDate(Today()))

PrintLine(nrF, New String(CChar("_"), 35))

PrintLine(nrF, "NUME PRENUME", TAB(20), "VARSTA")

PrintLine(nrF, New String(CChar("_"), 35))

For I = 0 To Me.nume.Items.Count - 1

PrintLine(nrF, Me.nume.Items.Item(I), TAB(20), Me.varsta.Items.Item(I))

Next I

FileClose(nrF)

End If

If Me.RadioButton2.Checked = True Then

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis1.txt", OpenMode.Append)

For I = 0 To Me.nume.Items.Count - 1

PrintLine(nrF, Me.nume.Items.Item(I), TAB(20), Me.varsta.Items.Item(I))

Next I

FileClose(nrF)

End If

End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button7.Click

'Evenimentul click al butonului EXIT



End

End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button5.Click

'Evenimentul click al butonului “MODIFICARE INREGISTRARI” din FORM1



Dim nrF As Integer = FreeFile()

Me.Hide()

Form2.listModif.Items.Clear()

FileOpen(nrF, "d:\work\vb\fis1.txt", OpenMode.Input)

Do While Not (EOF(nrF))

A1 = LineInput(nrF)

Form2.listModif.Items.Add(A1)

Loop

FileClose(nrF)

Form2.Show()

End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles Button1.Click

'Evenimentul click al butonului “OK” din FORM1



If Len(Trim(Me.TextBox1.Text)) > 0 Then

Me.nume.Items.Add(Me.TextBox1.Text)

Me.varsta.Items.Add(Me.TextBox2.Text)

Me.TextBox1.Text = ""

Me.TextBox2.Text = ""

End If

End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles Button2.Click

'Evenimentul click al butonului “CLEAR LISTA” din FORM1



Me.nume.Items.Clear()

Me.varsta.Items.Clear()

End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles Button4.Click

'Evenimentul click al butonului “LISTEAZA” din FORM1



Me.ListBox1.Items.Clear()

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis1.txt", OpenMode.Input)

Do While Not (EOF(nrF))

A1 = LineInput(nrF)

Me.ListBox1.Items.Add(A1)

Loop

FileClose(nrF)

End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles Button3.Click

'Evenimentul click al butonului “STERGERE INREGISTRARI” din ‘FORM1



Me.Hide()

Dim nrF As Integer = FreeFile()

Form3.LISTSTERG.items.Clear()

FileOpen(nrF, "d:\work\vb\fis1.txt", OpenMode.Input)

Do While Not (EOF(nrF))

A1 = LineInput(nrF)

Form3.listSterg.Items.Add(A1)

Loop

FileClose(nrF)

Form3.Show()

End Sub

Form2

‘Formă pentru modificarea înregistrărilor din fişier, preluate într-o listă care apoi se trece iar în fişier, modificată

'Declaraţii la nivel de formă

Dim I1 As Integer
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button3.Click

'Evenimentul click al butonului “SCRIE MODIFICARILE IN FISIER” din FORM2



Me.Hide()

Form1.Show()

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis1.txt", OpenMode.Output)

For I = 0 To Me.listModif.Items.Count - 1

PrintLine(nrF, Me.listModif.Items.Item(I))

Next I

FileClose(nrF)

End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e _As System.EventArgs) Handles Button2.Click

'Evenimentul click al butonului “Anuleaza” din FORM2



Form1.Show()

Me.Hide()

End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button1.Click

'Evenimentul click al butonului”Accepta Modificarile” din FORM2



If Len(Trim(Me.TextBox1.Text)) > 0 Then

Me.listModif.Items.Item(I1) = Me.TextBox1.Text

Me.TextBox1.Text = ""

End If
End Sub
Private Sub listModif_Click(ByVal sender As Object, ByVal e _

As System.EventArgs) Handles listModif.Click

'Evenimentul click al controlului casetă listă ”LISTMODIF” din FORM2 ‘prin care se preia în caseta text înregistrarea selectată din listă



I1 = Me.listModif.SelectedIndex

Me.TextBox1.Text = Me.listModif.Items.Item(I1)
End Sub

FORM3

‘Formă pentru ştergerea înregistrărilor din fişier, preluate într-o listă care ‘apoi se trece iar în fişier, modificată (fără înregistrările şterse)

‘Declaraţii la nivel de formă

Dim I1 As Integer
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button3.Click

'Evenimentul click al controlului “RESCRIE FISIER” ‘din FORM3



Me.Hide()

Form1.Show()

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis1.txt", OpenMode.Output)

For I = 0 To Me.listSterg.Items.Count - 1

PrintLine(nrF, Me.listSterg.Items.Item(I))

Next I

FileClose(nrF)

End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button1.Click

'Evenimentul click al butonului “Accepta stergere” din FORM3



Me.listSterg.Items.RemoveAt(I1)

Me.TextBox1.Text = ""

End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button2.Click

'Evenimentul click al butonului “Anuleaza”din FORM3



Me.Hide()

Form1.Show()

End Sub
Private Sub listSterg_Click(ByVal sender As Object, ByVal e _

As System.EventArgs) Handles listSterg.Click

'Evenimentul click al controlului casetă listă “LISTSTERG” din FORM3 ‘prin care se preia pentru ştergere, în caseta text, înregistrarea selectată în ‘listă



I1 = Me.listSterg.SelectedIndex

Me.TextBox1.Text = Me.listSterg.Items.Item(I1)

End Sub
Exemplu pentru fişierele cu acces direct (RANDOM) :
Problemă:

Completaţi şi dezvoltaţi aplicaţia de mai sus pentru a permite şi crearea şi actualizarea unui fişier aleator.



Rezolvare:

Am adăugat pe forma principală opţiunea FIŞIER RANDOM.



  Executând aplicaţia am creat fişierul, apoi am adăugat noi înregistrări, le-am vizualizat, le-am corectat întocmai ca în aplicaţia anterioară.




Codul sursă asociat obiectelor din FORM1 ce este forma prezentată mai sus se prezintă astfel:

.

'Declaraţii la nivel de formă



Dim A1 As String

Dim I1 As Integer

Structure persoana

Dim rNr As String

Dim rNume As String

Dim rVarsta As String

End Structure
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button7.Click

'Evenimentul click al butonului “SCRIE LISTA IN FISIER”



If Me.RadioButton1.Checked = True Then 'fisier secvential

If Me.RadioButton3.Checked = True Then 'creare fisier

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis2.txt", OpenMode.Output)

PrintLine(nrF, "PRIMUL TEST DE SCRIS INTR-UN FISIER")

PrintLine(nrF, "LA DATA DE", TAB(20), CDate(Today()))

PrintLine(nrF, New String(CChar("_"), 35))

PrintLine(nrF, "NUME PRENUME", TAB(20), "VARSTA")

PrintLine(nrF, New String(CChar("_"), 35))

For I = 0 To Me.nume.Items.Count - 1

PrintLine(nrF, Me.nume.Items.Item(I), TAB(20), _

Me.varsta.Items.Item(I))

Next I

FileClose(nrF)

End If

If Me.RadioButton4.Checked = True Then 'adaugare inregistrari

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis2.txt", OpenMode.Append)

For I = 0 To Me.nume.Items.Count - 1

PrintLine(nrF, Me.nume.Items.Item(I), TAB(20), _

Me.varsta.Items.Item(I))

Next I

FileClose(nrF)

End If

End If

If Me.RadioButton2.Checked = True Then 'fisier random

If Me.RadioButton3.Checked = True Then 'creare fisier

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis3.txt", OpenMode.Output)

FileClose(nrF)

FileOpen(nrF, "d:\work\vb\fis3.txt", OpenMode.Random)

Dim scrie As persoana

For I3 = 0 To Me.nume.Items.Count - 1

scrie.rNr = I3 + 1

scrie.rNume = Me.nume.Items.Item(I3)

scrie.rVarsta = Me.varsta.Items.Item(I3)

FilePut(nrF, scrie, I3 + 1)

Next I3

FileClose(nrF)

End If

If Me.RadioButton4.Checked = True Then 'adaugare inregistrari

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis3.txt", OpenMode.Random)

Dim I4 As Integer = 1

Dim scrie As New persoana

Do While Not (EOF(nrF))

FileGet(nrF, scrie, I4)

I4 = I4 + 1

Loop

For I3 = 0 To Me.nume.Items.Count - 1

scrie.rNr = I4 + I3

scrie.rNume = Me.nume.Items.Item(I3)

scrie.rVarsta = Me.varsta.Items.Item(I3)

FilePut(nrF, scrie, I4 + I3)

Next I3

FileClose(nrF)

End If
End If

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles Button4.Click

'Evenimentul click al butonului “Exit”



End

End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e _

As System.EventArgs) Handles Button6.Click

'Evenimentul click al butonului “MODIFICARE INREGISTRARI” ce ‘deschide “FORM2” formă în care se vor efectua modificările după ce ‘încarcă în lista “LISTMODIF” din această formă înregistrările din fişier



Me.Hide()

Form2.ListModif.Items.Clear()

Form2.ListBox1.Items.Clear()

Form2.ListBox2.Items.Clear()
If Me.RadioButton1.Checked = True Then

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis2.txt", OpenMode.Input)

Do While Not (EOF(nrF))

A1 = LineInput(nrF)

Form2.ListModif.Items.Add(A1)

Loop

FileClose(nrF)

Form3.Show()

End If

If Me.RadioButton2.Checked = True Then

Form2.ListModif.Items.Clear()

Dim nrF As Integer = FreeFile()

FileOpen(nrF, "d:\work\vb\fis3.txt", OpenMode.Random)

Dim I4 As Integer = 1

Dim scrie As New persoana

Do While Not (EOF(nrF))

FileGet(nrF, scrie, I4)

Form2.ListBox1.Items.Add(scrie.rNr)

Form2.ListModif.Items.Add(scrie.rNume)

Form2.ListBox2.Items.Add(scrie.rVarsta)

I4 = I4 + 1

Loop

FileClose(nrF)

Form2.Show()

End If

Yüklə 0,58 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin