Wyklad 09


Zbiory danych
Hura! Mój program działa bezbłędnie.
Wczoraj wprowadzałem dane przez 10 minut i
uzyskałem ciekawe wyniki. Zapomniałem je
zapisać, a nie pamiętam wprowadzanych danych.
Jak to rozwiązać na przyszłość?
Miejsce aplikacji między plikami
Tworzenie plików

Odczyt danych z pliku możliwy jest tylko wtedy, gdy
plik istnieje i aplikacja otworzyła go.

Tworzenie plików jest zatem zagadnieniem
pierwotnym.

Otwieranie i tworzenie plików realizuje ta sama
procedura  FileOpen.

Wywołanie procedury FileOpen wymaga ustalenia
co najmniej: numeru pliku (numer używany przez
aplikację), nazwy pliku, trybu dostępu do pliku.
Numer otwartego pliku

Aplikacja może jednocześnie utrzymywać w stanie otwartym
do 255 plików.

Aplikacja przypisuje otwieranemu plikowi dowolny numer
z przedziału <1, 255>.

Nie wolno powtórzyć numeru, który jest przypisany innemu,
aktualnie otwartemu plikowi. Po zamknięciu pliku, przypisany
mu numer jest zwracany do puli numerów możliwych do
użycia.

Przydział numerów można zautomatyzować używając funkcji
FreeFile. Jej wynikiem jest pierwszy nie używany numer
z puli.
Nazwa pliku

Nazwa związana z plikiem w pamięci
masowej.

Parametr określający nazwę pliku jest typu
String.

Aańcuch tekstowy określający nazwę pliku
może zawierać nazwy dysków, folderów,
katalogów.
Tryby dostępu do pliku

Tryb dostępu do pliku ustala się podczas jego tworzenia/otwierania.

Obsługiwane tryby to:

Input  służy do otwierania plików sekwencyjnych w celu wprowadzenia z
nich danych,

Output  otwieranie plików sekwencyjnych w celu wyprowadzenia do nich
wyników,

Random  otwieranie plików o dostępie swobodnym, kierunek przepływu
informacji w obie strony (zapis/odczyt), porcje danych o określonym
rozmiarze,

Append  otwieranie plików sekwencyjnych w celu wyprowadzenia
wyników, wyniki są dodawane w końcowej pozycji pliku,

Binary  otwieranie plików do przechowywania danych binarnych, kierunek
przepływu informacji w obie strony (zapis/odczyt).
Przykłady otwierania plików
FileOpen(1, ''Definicje.def'', Output)
FileOpen(FreeFile, NazwaPliku, Random)
FileOpen(NrPlikuWzorow, _
NazwaPlikuWzorow & ''.wzory'', _
Input)
-------------------------------------------
Zakłada się, że zaimportowano enumerację Microsoft.VisualBasic.OpenMode oraz,
że zadeklarowano zmienne (stałe) typu String o nazwach: NazwaPliku, NazwaPlikuWzorow.
Wyprowadzanie wyników

Zapis wyników do plików otwartych
w różnych trybach dostępu realizowany jest
przy użyciu różnych procedur, przy tym do
obsługi plików sekwencyjnych istnieją
procedury umożliwiające wyprowadzanie
wyników w określonym formacie.

Procedury zostaną przedstawione
z podziałem na tryby dostępu.
Zapis do plików sekwencyjnych

Zapis możliwy jedynie w pozycji końcowej pliku.

Plik otwarty z parametrem OpenMode.Output
zostaje utworzony  jego pozycją końcową jest
początek pliku.

Plik otwarty z parametrem OpenMode.Append
zostaje otworzony, a kursor tekstowy zostaje
umieszczony w pozycji końcowej  po ostatnim
zapisie, umieszczonym w pliku w poprzedniej
sesji wyprowadzania wyników.
Zapis do plików sekwencyjnych

Niezależnie od tego, czy wyniki są umieszczane w pliku otwartym w trybie
Output, czy w trybie Append zapis realizują procedury:

Print (PrintLine)

Write (WriteLine)

Procedury ze słowem  Line w nazwie działają tak samo, jak ich  krótsze
odpowiedniczki, dodatkowo wyprowadzając do pliku znaki sterujące
końca wiersza.

Każda z wymienionych procedur przyjmuje jako parametry:

Numer pliku przydzielony podczas otwierania pliku,

Listę wyrażeń rozdzielonych przecinkami, których wartości mają zostać
wyprowadzone do pliku.

Omówione zostaną jedynie wersje procedur o nazwach bez słowa  Line .
Procedury Print

Ogólna postać wywołania:
Print(NrPliku, Parametr1, Parametr2, & )

Paramter1 i kolejne mogą być wyrażeniami, których wartość wyznaczana
jest podczas wywołania procedury Print.

Wartość Parametr1 wyprowadzana jest w pozycji końcowej pliku, wartości
kolejnych parametrów w punktach wyznaczonych przez tabulację. Liczby
bez znaku przesunięte są o jedną kolumnę w prawo uwzględniając
miejsce na znak.

Domyślny skok tabulacji wynosi 14 znaków. Położenie punktu
wyprowadzania można zmienić używając jako parametru funkcji
SPC(Arg), której wynikiem jest tekst składający się ze spacji w liczbie
Arg, a także funkcji TAB(Arg), której efektem jest przeniesienie położenia
końcowego skoku tabulacji do kolumny o numerze Arg.
Procedury Print  przykład
For index = 0 To Ubound(Osoby)
With Osoby(index)
Print(1, "Pseudonim: ", .Pseudonim, _
"Należy: ", .Nalezy, "Od roku: ", .OdRoku)
End With
PrintLine(1)
Next

Efekt
Pseudonim: Każdosław Należy: True Od roku: 2012
Pseudonim: Nijak Należy: False Od roku: 2011
Procedury Write

Ogólna postać wywołania:
Write(NrPliku, Parametr1, Parametr2, & )

Paramter1 i kolejne mogą być wyrażeniami, których wartość wyznaczana
jest podczas wywołania procedury Write.

Wartość parametrów Parametr1, Parametr2, ... wyprowadzane są kolejno
w pozycji końcowej pliku, po każdej wyprowadzany jest przecinek.
W zależności od typu wartości wyrażeń będących parametrami
wyprowadzany tekst jest objęty:

String  cudzysłowem

Boolean  znakami ''hash'' (kratka, krzyżyk, płotek)

Typy liczbowe  bez wyróżnienia, należy pamiętać, że liczby rzeczywiste
wyprowadzane są ze znakiem ''.'' (kropka), rozdzielającym część całkowitą,
od ułamkowej.
Procedury Write  przykład
For index = 0 To Ubound(Osoby)
With Osoby(index)
Write(1, "Pseudonim: ", .Pseudonim, _
"Należy: ", .Nalezy, "Od roku: ", .OdRoku)
End With
WriteLine(1)
Next

Efekt
"Pseudonim: ","Każdosław","Należy: ",#TRUE#,"Od roku: ",2012,
"Pseudonim: ","Nijak","Należy: ",#FALSE#,"Od roku: ",2011,
Zamykanie plików
(niezależnie od trybu dostępu)

Procedura FileClose przyjmuje listę (także
pustą) wyrażeń rozdzielonych przecinkami.

Wartość wyrażenia jest typu Integer i
przedstawia sobą numer pliku, który został
mu przydzielony w chwili otwarcia.

Zamknięte zostaną pliki o numerach
podanych jako parametry, lub wszystkie
pliki, jeżeli lista jest pusta.
Odczyt z pliku sekwencyjnego

Przed próbą odczytu z pliku sekwencyjnego konieczne
jest jego otwarcie w trybie OpenMode.Input.

Do odczytu danych służą metody:

InputString

LineInput

Input

Po odczytaniu danych, pozycja pliku przesuwa się i nie
można jej cofnąć. Chcąc ponownie odczytać te same
dane, konieczne jest zamknięcie i ponowne otwarcie
pliku.
Funkcja InputString

Przyjmuje dwa parametry o następującym
znaczeniu:

Numer pliku (musi być otwarty w trybie Input)

Liczba znaków do odczytania z pliku

Wynikiem funkcji są odczytane z pliku znaki.

Interpretacja ciągu znaków należy do
programisty.
Funkcja LineInput

Przyjmuje jeden parametr  numer pliku.

Wynikiem funkcji jest ciąg znaków od
bieżącej pozycji w pliku, aż do napotkania
znaków końca wiersza, lub końca pliku.

Interpretacja łańcucha tekstowego należy
do programisty.
Procedura Input

Przyjmuje dwa parametry o następującym znaczeniu:

Numer pliku, z którego należy pobrać dane

Zmienna, do której dane, po ewentualnej konwersji, należy
przypisać

Granicą ciągu znaków pobieranych przez procedurę
jest przecinek, lub koniec wiersza (pliku).

Jeżeli ciągu znaków nie można przekonwertować na
typ zmiennej podanej jako drugi parametr wywołania,
to wystąpi błąd.
Wymiana informacji z plikami
o dostępie swobodnym

Plik otwarty w trybie OpenMode.Random
pozwala na odczyt danych z dowolnej
pozycji, zapis wyników na dowolnej pozycji.

Wymieniane z plikiem informacje muszą
mieć określony rozmiar, ustalony w chwili
otwarcia pliku.

Do ustalania rozmiaru służy szósty,
opcjonalny parametr procedury FileOpen.
Zapis do pliku
o dostępie swobodnym

Procedura FilePut przyjmuje dwa parametry:

Numer pliku

Nazwa zmiennej przechowującej informacje

W przypadku niedopasowania rozmiaru
potrzebnego do zapisania wartości zmiennej i
ustalonego rozmiaru zapisu/odczytu następuje:

Błąd, gdy ilość informacji jest zbyt duża

Nieoptymalne wykorzystanie obszaru zajmowanego
przez plik
Odczyt z pliku
o dostępie swobodnym

Procedura FileGet przyjmuje dwa
parametry:

Numer pliku

Nazwę zmiennej, która jest przeznaczona do
przechowywania odczytanych informacji

Procedura posiada 13 wersji, dla zmiennych
wszystkich typów.
Opcjonalny parametr procedur:
FilePut, FileGet oraz metody Seek

Trzeci parametr procedur wskazuje numer
pozycji, na której ma nastąpić zapis (z której
ma nastąpić odczyt).

Aktualną pozycję w pliku zwraca funkcja Seek,
przyjmująca jako parametr numer pliku.

Procedura Seek pozwala zmienić pozycję w
pliku. Przyjmuje jako parametry: numer pliku
oraz numer pozycji, na którą przesunąć kursor.
Tryb binarny

Pliki otwarte w trybie OpenMode.Binary
pozwalają na przepływ informacji o dowolnej
wielkości.

Do zapisu służy procedura FilePut  ilość
zapisywanych bajtów równa jest rozmiarowi
zmiennej użytej jako drugi parametr.

Do odczytu służy procedura FileGet  ilość
odczytywanych bajtów równa jest rozmiarowi
zmiennej użytej jako drugi parametr.
Przydatne metody

Podczas tradycyjnego przetwarzania plików, oprócz innych
metod, można użyć:

Funkcji System.IO.File.Exists(NazwaPliku As String) As Boolean
Zwraca ''True'' jeżeli istnieje plik o podanej nazwie

Funkcji EOF(NumerPliku As Integer) As Boolean
Zwraca ''True'', jeżeli pozycja pliku jest pozycją końcową

Funkcji FileLen(NazwaPliku As String) As Long
Zwraca rozmiar pliku o podanej nazwie, przechowywany w
informacjach o pliku

Funkcja LOF(NumerPliku As Integer)
Zwraca wielkość otwartego pliku


Wyszukiwarka

Podobne podstrony:
Wyklad 09 USG
Wyklad 09 Podstawy Genetyki AI
wyklad6 09
wyklad 2 3 09
Wyklad 09
wykład 09
wyklad 09
Wyklad11 09
wykład 09
Wyklad 09 decyzja ustanawiajaca Eurojust
fizjologia zwierzat wyklad 09
Wyklad 09 decyzja wzmacniajaca Eurojust
Wyklad13 09
wyklady 09
Wykladowka 2 09

więcej podobnych podstron