Lab6, Visual Basic Lab 6a, Visual Basic Lab 3


UKO Użytkowanie Komputerów

Visual Basic Lab 6

Projekt Pliki daje okazję do zapoznania się z następującymi zagadnieniami pracy z Visual Basic'iem:

  1. typy plików;

  2. tryb dostępu bezpośredni i sekwencyjny;

  3. numeracja plików i znajdowanie wolnego numeru pliku;

  4. otwieranie plików;

  5. polecenia Print #, Write #, Read #, Get #, Put #;

  6. wykorzystanie kontrolek związanych z plikami.

Visual Basic obsługuje następujące typy plików:

  1. o dostępie sekwencyjnym;

  2. o dostępie swobodnym;

  3. pliki binarne.

Do otwierania plików służy polecenie Open, które równocześnie rezerwuje specjalny uchwyt do czytania z i do pisania w pliku. Uchwyt pliku to unikatowa ścieżka do pliku połączona z numerem nadanym przez polecenie Open.

Format instrukcji Open jest następujący:

Open „Nazwa Pliku” [For Tryb]

[PrawaDostępu]

[RodzajZabezpieczenia]

As [#] intNumerPliku [Len = intDługośćRekordu]

Tabela VI.1. Wartości argumentu Tryb polecenia Open

Tryb

Opis

Append

Otwiera plik z dostępem sekwencyjnym do pisania w trybie dołączania. Jeśli plik istnieje, to zapisuje na końcu pliku, jeśli nie to tworzy nowy plik. Dane nigdy nie są nadpisywane!

Binary

Otwiera plik z dostępem binarnym. Można czytać i zapisywać pojedyncze bajty.

Input

Otwiera plik z dostępem sekwencyjnym do czytania. Dane są czytane od początku w tej samej kolejności jak były zapisywane.

Output

Otwiera plik z dostępem sekwencyjnym do pisania. Jeśli plik istnieje, to zapisuje od początku pliku, jeśli nie to tworzy nowy plik i też zapisuje od początku pliku. Dane są nadpisywane!

Random

Otwiera plik z dostępem bezpośrednim do czytania i pisania. Można czytać i zapisywać określone rekordy pliku.

Objaśnienia:

Pliki zamyka instrukcja Close:

Close # intNumerPliku[,intNumerPliku2][...intNumerPlikuN]

Instrukcja Close bez argumentów zamyka wszystkie pliki.

Wydruk VI.1.

Kod znajduje dostępne wolne numery plików, otwiera dwa pliki z dostępem sekwencyjnym, jeden do czytania, drugi do pisania, a następnie je zamyka.

1 Dim intPlikDoCzytania As Integer

2 Dim intPlikDoPisania As Integer

3

4 'Otwórz plik do czytania

5 intPlikDoCzytania = FreeFile 'Weź pierwszy wolny numer

6 Open "PlikDanych.dat" For Input As intPlikDoCzytania

7

8 'Otwórz plik do pisania

9 intPlikdoPisania = FreeFile 'Weź następny numer

10 Open "PlikDocelowy.Dat" For Output As intPlikDoPisania

11

12 'Tu kod czytająco/piszący

13

14 'Zamknij pliki

15 Close intPlikDoPisania

16 Close intPlikDoCzytania

Przed jakimkolwiek użyciem pliku, należy go otworzyć. Do pisania najczęściej używa się polecenia

Print # IntNumerPliku, [Treść] lub

Write # IntNumerPliku, [Treść]

przy czym wszystkie dane wpisywane do pliku przez Write oddzielone są przecinkami., dane łańcuchowe ujmowane są w cudzysłowy, dane daty i czasu ogranicza znak #, wartości boolowskie zapisuje jako #TRUE# lub #FALSE#, podobnie #NULL# i #Error KodBłędu#.

Tabela VI.2. Treść polecenia Print

Tryb

Opis

Spc(intN1)

Wstawia N1 spacji

Tab(intN2)

Przesuwa punkt wstawiania do kolumny o numerze intN2. Tab bez argumentu przesuwa do początku następnej strefy drukowania (14 spacji)

Wyrażenie

Wyrażenie typu łańcuch lub liczba

punktWstawiania

Określa położenie wydrukowania następnego znaku: jeśli ma to nastąpić bezpośrednio po ostatnio zapisanym znaku użyj średnika

Wydruk VI.2. Pisanie do pliku

1 Private Sub plcDrukujDoPliku_Click()

2 Dim intLicznik As Integer 'licznik pętli

3 Dim intNumerPliku As Integer 'numer pliku

4 Dim intOdp As Integer 'odpowiedź z MsgBox()

5

6 'Otwórz plik do pisania

7 intNumerPliku = FreeFile 'weź numer

8 'Jeśli chcesz, zmień ścieżkę

9 Open "Z:\Liczby.txt" For Output As intNumerPliku

10

11 'Pokaż, co zrobiłeś

12 intOdp = MsgBox("Otworzyłem plik Liczby.txt")

13

14 For intLicznik = 1 To 6

15 'Zapisz licznik pętli

16 Print #intNumerPliku, intLicznik

17 intOdp = MsgBox("Wpisałem " & intLicznik & _

18 " w pliku Liczby.txt")

19 Next intLicznik

20

21 'Zamknij plik i poinformuj

22 Close #intNumerPliku

23 intOdp = MsgBox("zamknąłem plik Liczby.txt")

24 End Sub

Zadanie VI.1.

Sprawdź, korzystając z powyższego kodu, jak działa instrukcja

Write #intNumerPliku, intLicznik;.

Wypróbuj tę instrukcję ze średnikiem oraz bez średnika i porównaj wyniki.

ÿ

Przypominamy, że przed jakimkolwiek użyciem pliku, należy go otworzyć. Do czytania najczęściej używa się polecenia

Input #IntNumerPliku, Zmienna1[,Zmienna2][... ZmiennaN]

W pracy z plikami o dostępie bezpośrednim polecenia Print # i Input # zastępują polecenia Get # i Put #.Mają one następujące formaty:

Put [#] intNumerPliku, intNumerRekordu] Zmienna

Get [#] intNumerPliku, intNumerRekordu] Zmienna

Numery rekordów zaczynają się od 1. Aby elementy tablic były również numerowane od 1, a nie od 0, jak to się przyjmuje domyślnie, należy w preambule modułu umieścić polecenie

Option Base 1

Zapisywane i odczytywane zmienne mogą być dowolnego typu.

Można również definiować własne typy:

[Private | Public] Type NazwaTypu

Zmienna1[(RozmiarTablicy)] As Istniejący typ [* DługośćStr]

Zmienna2[(RozmiarTablicy)] As Istniejący typ [* DługośćStr]

:

:

End Type

Wydruk VI.3 Deklaracja typu własnego

1 ` Ta deklaracja musi być w module projektu

2 Type DaneOsoby

3 strImię As String * 8

4 strNazwisko As String * 20

5 End Type

6 Public Osoba as DaneOsoby

Przykład użycia kodu z Wydruku VI.2

Osoba.strImię = Jan”

Osoba.strNazwisko = „Kowalski”

etkImię.Caption = „Imię: „ & Osoba.strImię

etkNazwisko.Caption = „Nazwisko: „ & Osoba.strNazwisko

* 8 i * 20 oznaczają, że rekordy Osoba.strImię i Osoba.strNazwisko mają odpowiednio długość 8 i 20 znaków. Jeśli znaków jest mniej, to dane są uzupełniane spacjami do zadeklarowanej długości rekordu. Typy można zagnieżdżać.

Wydruk VI.4 Praca z plikami o dostępie bezpośrednim

1 Private Sub plcUtwórz_Click() 'Ta procedura tworzy nowy plik

2 Dim intNumerPliku As Integer 'numer pliku

3 Dim intLicznik As Integer 'licznik pętli

4

5 intNumerPliku = FreeFile

6 Open "Z:\Swobodny.txt" For Random _

7 As #intNumerPliku Len = 5

8

9 'Zapisz liczby w pliku dla każdego przebiegu pętli

10 For intLicznik = 1 To 6

11 'Zapisz numer rekordu

12 Put #intNumerPliku, intLicznik, intLicznik

13 Next intLicznik

14

15 Close #intNumerPliku

16 End Sub

17

18 Private Sub plcZmień_Click() 'Zmienimy trzeci rekord

19 Dim intNumerPliku As Integer 'numer pliku

20

21 intNumerPliku = FreeFile

22 Open "Z:\Swobodny.txt" For Random _

23 As #intNumerPliku Len = 5

24

25 'Zapisz nową wartość w trzecim rekordzie

26 Put intNumerPliku, 3, 9

27 'nadajemy rekordowi 3 wartość 9

28

29 Close #intNumerPliku End Sub

30

31 Private Sub plcZmień_Click() 'Wyświetla zawartość pliku

32 DimintNumerPliku As Integer 'numer pliku

33 Dim intLicznik As Integer 'licznik pętli

34 Dim intWartość As Integer 'odczytana wartość

35 Dim intOdp As Integer 'odpowiedź z MsgBox()

36

37 'Otwórz plik

38 intNumerPliku = FreeFile

39 Open "Z:\Swobodny.txt" For Random _

40 As #intNumerPliku Len = 5

41

42 intOdp = MsgBox("Plik Swobodny.txt został otwarty")

43

44 'Przejdź po rekordach i czytaj z pliku

45 For intLicznik = 1 To 6

46 Get #intNumerPliku, intLicznik, intWartość

47 intOdp = MsgBox("Z pliku Swobodny.txt " _

48 & "odczytano wartość: " _

49 & intWartość)

50 Next intLicznik

51

52 Close #intNumerPliku

53 intOdp = MsgBox("Plik Swobodny.txt został zamknięty")

54 EndSub

Visul Basic udostępnia następujące kontrolki (tu: szczególne pola list) do zarządzania stacjami dysków, katalogami i plikami:

Tabela VI.3 Polecenia dla stacji dysków i katalogów

Tryb

Opis

ChDir strDysk

zmienia domyślną stację dysków na wskazaną w argumencie

ChDir strFolder

zmienia domyślny katalog na wskazany w argumencie

Kill strPliki

usuwa plik lub pliki reprezentowane przez znaki specjalne

MkDir strPlik

tworzy nowy katalog o wskazanej nazwie

RmDir strPlik

usuwa katalog o wskazanej nazwie

Przykład VI.2 Dojście do katalogu

ChDrive „Z:\”

ChDir „\MojePliki”

Przykład VI.3 Sprawdzanie istnienia pliku

If UCase(Dir(„z:\Sprzedaż2002.dat”)) = „SPRZEDAŻ2002.DAT” Then

intOdp = MsgBox(„Plik istnieje”)

Else

intOdp = MsgBox(„Plik nie ma”)

End If

Funkcja Dir() może wystąpić bez argumentów (bez nawiasów i argumentów), jeśli została już poprzednio użyta. VB będzie zwracał nazwy plików pasujących do szablonu, aż do znalezienia ostatniego pliku. Kiedy Dir zwróci string zerowy (""), należy w kolejnym wywołaniu Dir() zawrzeć w kolejną specyfikację pliku, gdyż inaczej powstanie błąd.

Przykład VI.4 Wybranie określonego dysku

drvDysk.Drive = "z:\"

Przykład VI.5 Ustawienie wybranego powyżej dysku jako domyślnego

ChDrive drvDysk.Drive

Przykład VI.6 Ustawienie ścieżki dostępu do pliku

dirKatalog.Path = drvDysk.Drive

Przykład VI.7 zamiana bieżącego katalogu na wybrany przez użytkownika

ChDir dirKatalog.Path

Przykład VI.8 Filtrowanie plików

filPliki.Pattern = "*.frm:*.vbp"

-2

katalog zawierający wybrany katalog itd.

-1

wybrany katalog

ListIndex =

0

pierwszy podkatalog wybranego katalogu

1

podkatalog pierwszego podkatalogu wybranego katalogu

2

itd.

0x01 graphic

Projekt formy Pliki służącej jako przeglądarka plików

Forma, Name

Forma, Name

frmPlik

Forma, Caption

Przeglądarka plików

Forma, Height

4500

Forma, Width

7000

Pole listy, Name

lstPlik

Pole listy, Height

3405

Pole listy, Left

120

Pole listy, Top

120

Pole listy, Width

6615

Przycisk poleceń, Name

plcKolor

Przycisk poleceń, Caption

&Zmień kolor pliku

Element menu nr 1, Caption

&Plik

Element menu nr 1, Name

mnuPlik

Element menu nr 2, Caption

&Otwórz

Element menu nr 2, Name

mnuPlikOtwórz

Element menu nr 3, Caption

-

Element menu nr 3, Name

mnuSeparator1

Element menu nr 1, Caption

&Koniec

Element menu nr 1, Name

mnuPlikKoniec

Okno dialogowe, Name

odOtwórz

Okno dialogowe, DialogTitle

Otwórz

Okno dialogowe, InitDir

Z:\

Okno dialogowe, Filter

Pliki tekstowe (*.TXT)|*.txt|Pliki wsadowe (*.BAT)|*.bat

Okno dialogowe, CancelError

True

Okno dialogowe, MaxFileSize

4096

Własciwości kontrolki typowego okna dialogowego ustawiamy w oknie dialogowym Project -> Components -> Microsoft Common Dialog Control 6.0 (SP 3), w nim w formie Property Pages (Properties -> Custom) korzystamy z właściwości Custom.

0x01 graphic

Rys. VI.2 Właściwość Custom kontrolki okna dialogowego

Wydruk VI.5 Wczytywanie pliku w pole listy

Private Sub Form_Resize()

`Jeśli użytkownik zmieni rozmiar formy,

`zmień wielkośc pola listy.

`Używana jest także, gdy forma wczytywana jest po raz pierwszy

Dim intOdp As Integer `odpowiedź z MsgBox()

`Sprawdź, czy forma nie jest zbyt mała mała,

`by wyświetlić pole listy

If (frmPlik.Width < 400) _

Or (frmPlik.Height < 3500) Then

`Ukryj pole listy i poucz co robić

lstPlik.Visible = False

intOdp = MsgBox(„Okno za małe. Powiększ je”, vbCritical)

Else

`Wyświetl listę (na wszelki wypadek)

lstPlik.Visible = True

`Dopasuj rozmiar pola listy i położenie przcisku

`do wielkości okna formy

lstPlik.Width= frmPlik.Width - 360

lstPlik.Height= frmPlik.Height - 1200

plcKolor.Top = frmPlik.Height - 1100

End If

End Sub

Private Sub mnuPlikKoniec_Click()

`Zakończ aplikację

End

End Sub

Private Sub mnuPlikOtwórz_Click()

Dim strLiniaPliku As String

„Ustaw bład kliknięci aAnuluj

On Error GoTo ObsługaBłędu

odOtwórz.CancelError = True

`Wyświetl okno dialogowe Otwórz

odOtwórz.ShowOpen

`Otwórz wybrany plik

Open odOtwórz.Filename for Input As #1

`Zrób miejsce na nowy plik

lstPlik.Clear

Do Until (EOF(1))

Line Input #1, strLiniaPliku

lstPlik.AddItem strLiniaPliku

Loop

`Zamknij plik

Close

ObsługaBłędu:

`Jeśli użytkownik kliknął Anuluj, to nie rób nic

End Sub

Private Sub plcKolor_Click()

`Wybór koloru tła pola listy

odOtwórz.CancelError = False

odOtwórz.ShowColor

lstlik.BackColor = odOtwórz.Color

End Sub

Format instrukcji Line Input #:

Line Input #intNumerPLiku, strLiniaTekstu

UKO Użytkowanie Komputerów, Lab 6

Visual Basic Lab 6.doc 4/9



Wyszukiwarka