Copyright © 2014, Janusz Bonarowski 1
Ć wiczenie VB_7.1_Zapis/odczyt z pliku
Zadanie. Rozwiązanie równania kwadratowego
Wykonajmy aplikację pozwalająca obliczać pierwiastki równania kwadratowego
2 0
= +
⋅ +
⋅x B x C
A . Niech współczynniki równania będą wprowadzane z klawiatury lub wczytywane z pliku tekstowego. Niech dane mogą być zapisywane do pliku tekstowego, patrz propozycja formularza ma rys. 1.
Rys. 1. Propozycja formularza wraz z obiektami OpenFileDialog i SaveFileDialog
Podczas wczytywania danych lub podczas ich zapisywania bardzo wygodną i popularną formą stosowaną w środowisku Windows jest ono dialogowe pokazane na rys. 2.
Rys. 1. Typowe okno dialogowe Otwórz/Zapisz
Copyright © 2014, Janusz Bonarowski 2 Kontrolkami pozwalającymi używać takich okien są obiekty OpenFileDialog i SaveFileDialog znajdujące się na pasku Toolbox na zakładce Dialogs. Oba te obiekty dodajmy, w stanie
projektowania, do formularza. Pojawiają się na dolnym pasku pod właściwym formularzem, patrz rys. 1. Pozostawimy im nazwy domyślne.
Kody procedur
Private Sub btnOblicz_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnOblicz.Click 'Rozwiazanie równania
Dim A, B, C, D, X1, X2 As Single lblOdp.Text = ""
Try
A = CSng(txtA.Text) If A = 0 Then
lblOdp.Text = "To nie jest równanie kwadratowe"
Exit Sub End If
B = CSng(txtB.Text) C = CSng(txtC.Text) D = B ^ 2 - 4 * A * C If D < 0 Then
lblOdp.Text = "Delta < 0" & vbCrLf & _ "Brak pierwiastków"
Else
X1 = (-B - Math.Sqrt(D)) / (2 * A) X2 = (-B + Math.Sqrt(D)) / (2 * A)
lblOdp.Text = "X1=" & CStr(X1) & vbCrLf & _ "X2=" & CStr(X2)
End If
Catch ex As Exception
lblOdp.Text = "Błąd danych"
End Try End Sub
Private Sub btnDaneZPliku_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnDaneZPliku.Click 'Otwarcie okna dialogowego OpenFileDialog1
OpenFileDialog1.InitialDirectory = CurDir() OpenFileDialog1.Title = "Wybierz plik z danymi"
OpenFileDialog1.Filter = _
"Plik danych (*.txt)|*.txt|All Files(*.*)|*.*"
OpenFileDialog1.FileName = ""
OpenFileDialog1.ShowDialog() End Sub
Copyright © 2014, Janusz Bonarowski 3 Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, _ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles OpenFileDialog1.FileOk 'Wczytanie danych z pliku
Dim plik As String
'Kasowanie poprzednich wartości txtA.Text = ""
txtB.Text = ""
txtC.Text = ""
lblOdp.Text = ""
Try
' Odczytanie ścieżki do pliku.
plik = OpenFileDialog1.FileName
' (1) Otwarcie pliku do odczytu.
FileOpen(1, plik, OpenMode.Input)
' (2) Odczytanie danych.
Input(1, txtA.Text) Input(1, txtB.Text) Input(1, txtC.Text)
' (3) Zamknięcie pliku.
FileClose(1)
Catch ex As Exception FileClose(1)
MsgBox("Błąd nr = " & Err.Number.ToString, , _ "Błąd w pliku danych") 'If Err.Number = 62 Then
' MsgBox("Zbyt mała liczba danych", _
MsgBoxStyle.Critical, "Błąd w pliku danych") 'End If
End Try End Sub
Copyright © 2014, Janusz Bonarowski 4 Private Sub btnZapisz_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnZapisz.Click 'Wyświetlenie okna dialogowego
SaveFileDialog1.InitialDirectory = CurDir() SaveFileDialog1.Title = "Zapisz plik z danymi"
SaveFileDialog1.Filter = _
"Plik danych (*.txt)|*.txt|All Files(*.*)|*.*"
SaveFileDialog1.ShowDialog() End Sub
Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, _ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles SaveFileDialog1.FileOk 'Zapis danych do pliku
Dim plik As String Try
'Pobranie scieżki do pliku
plik = SaveFileDialog1.FileName
'(1) Otwarcie pliku do zapisu.
FileOpen(1, plik, OpenMode.Output)
'(2) Odczytanie danych.
PrintLine(1, txtA.Text) PrintLine(1, txtB.Text) PrintLine(1, txtC.Text)
'(3) Zamknięcie pliku.
FileClose(1)
Catch ex As Exception FileClose(1)
MsgBox("Błąd nr: " & Err.Number, MsgBoxStyle.Critical, _ "Błąd zapisu")
End Try End Sub
Uwaga1
Proszę zwrócić uwagę, że zdarzenie Click na przyciskach btnDanzeZPliku i btnZapisz jedynie wyświetla odpowiednie okna dialogowe (OpenFileDialog1 i Save FileDialog1) natomiast właściwa akcja odczytywania danych z pliku lub zapisu danych do pliku odbywa się oddzielnych
procedurach OpenFileDialog1_FileOk i SaveFileDialog1_FileOk.
Uwaga2
Pokazana technika zapisu i odczytu danych składa się zawsze z 3 kroków:
(1) Otwarcie pliku,
(2) Zapis lub odczyt danych (3) Zamknięcie pliku.