Rozkaz Get
Instrukcja Get odczytuje dane z pliku dyskowego do zmiennej.
Składnia rozkazu Get:
Get [#]NrPliku, [NrRekordu], NazwaZmiennej
Argument NrPliku jest wymaganym poprawnym numerem pliku.
Argument NrRekordu jest opcjonalną wartością typu Long. Jest to numer rekordu (dla plików otwartych w trybie Random) lub numer bajtu (dla plików otwartych w trybie Binary) od którego zostanie rozpoczęte odczytywanie.
Argument NazwaZmiennej jest wymaganą nazwą zmiennej do której mają zostać przekazane odczytane dane z dysku.
Dane czytane rozkazem Get zwykle są zapisywane rozkazem Put.
Pierwszy rekord lub bajt ma numer 1, drugi 2, itd.
Jeżeli argument NrRekordu zostanie ominięty należy wstawić przecinki separujące. Np:
Get #1,,varBufor
Operacja odczytu zostanie wtedy wykonana na następnym rekordzie lub bajcie, po tym na którym został wykonany ostatni rozkaz Get lub Put lub na pozycji wskazanej przez ostatni rozkaz Seek.
| Pliki otwarte w trybie Random |
| Jeżeli długość danych, które mają zostać odczytane jest mniejsza niż długość wskazana w sekcji Len rozkazu Open, rozkaz Get odczyta następne rekordy w granicach wskazanej długości rekordu. Wolne miejsce między końcem rekordu i początkiem następnego rekordu jest zapełnione bieżącą zawartością bufora plikowego. Ponieważ rozmiar nieokreślonych danych pomiędzy rekordami nie może być na stałe wyznaczony, dobrze jest ustawiać długość rekordu zgodną z długością odczytywanych danych. |
| Jeżeli zmienna, która ma zostać odczytana jest łańcuchem o zmiennej długości, rozkaz Get odczytuje 2-bajtowy opis zawierający długość łańcucha a potem czyta dane, które są przekazane do zmiennej. Długość rekordu określona przez sekcję Len rozkazu Open musi być przynajmniej o 2 bajty większa niż aktualna długość łańcucha. |
Jeżeli zmienna odczytywana z dysku jest wartością numeryczną typu Variant, rozkaz Get odczytuje 2 bajty określające typ VarType typu Variant a następnie dane, które przekazuje do zmiennej. Np, jeżeli odczytywana jest zmienna typu Variant o VarType 3, rozkaz Get odczytuje 6 bajtów: 2 bajty określające typ wartości VarType 3(Long) i 4 bajty zawierające dane Long. Długość rekordu określona w sekcji Len rozkazu Open musi być przynajmniej o 2 bajty większa niż aktualna ilość bajtów potrzebna do przechowywania zmiennej.
Można używać rozkazu Get aby odczytywać tablice Variant z dysku, ale nie można używać rozkazu Get aby odczytywać zmienne typu Variant zawierającej tablicę. Nie można również odczytywać obiektów z dysku. |
| Jeżeli zmienna, która ma być odczytana jest typu Variant o VarType 8 (String), rozkaz Get odczytuje 2 bajty określające VarType, potem 2 bajty określające długość łańcucha i dopiero zawartość zmiennej. Długość rekordu określona w sekcji Len rozkazu Open musi być przynajmniej o 4 większa niż aktualna długość łańcucha. |
Jeżeli zmienna, która ma zostać odczytana jest dynamiczą tablicą, rozkaz Get odczytuje informację o długości równej 2 plus 8 razy liczba wymiarów (2+8*LiczbaWymiarów). Długość rekordu określona w sekcji Len rozkazu Open musi być większa lub równa sumie wszystkich bajtów potrzebnych na odczytanie tablicy na dysk i opisu tablicy. Np:
Dim intTablica (1 To 5, 1 To 10) As Integer
potrzebuje na zapisanie na dysk 118 bajtów (opis:2+8*2[wymiary]=18[bajtów]; zawartość:5*10*2[bajty]=100[bajtów]) |
| Jeżeli zmienna, która ma zostać odczytana z dysku jest tablicą o stałym rozmiarze, rozkaz Get odczytuje tylko dane. Opis nie jest odczytywany z dysku. |
| Jeżeli zmienna, która ma zostać odczytana jest innego typu zmienną (nie łańcuchem o zmiennej długości lub Variant), rozkaz Get odczytuje z dysku tylko dane. Długość rekordu określona w sekcji Len rozkazu Open musi być większa lub równa długości danych, które mają być odczytane. |
| Rozkaz Get odczytuje elementy typu użytkownika tak jakby odczytywał każdy z nich osobno, tak jakby nie były rozdzielone pustymi (nieokreślonymi) miejscami. Dynamiczna tablica wartości typu użytkownika (zapisana przez Put) jest odczytywana z dysku z poprzedzającą informacją, której długość wynosi 2 plus 8 razy liczba wymiarów (2+8*LiczbaWymiarów). Długość rekordu określona w sekcji Len rozkazu Open musi być większa lub równa sumie bajtów potrzebnych na odczytanie wszystkich elementów typu użytkownika (włączając w to tablice) i opisu tablicy. |
Pliki otwarte w trybie Binary
Obowiązują wyszystkie zasady jak dla plików otwartych w trybie Random z wyjątkiem: |
| Sekcja Len rozkazu Open jest ignorowana. Rozkaz Get odczytuje z dysku ciągle, bez przerw między rekordami. |
| Dla wszystkich tablic innych niż tablice wartości typu użytkownika, rozkaz Get odczytuje z dysku tylko dane. Informacje na temat tablicy nie są czytane. |
Rozkaz Get odczytuje łańcuchy o zmiennej długości, które nie są elementami typu użytkownika, bez 2-bajtowego opisu długości. Liczba bajtów odczytywanych jest równa liczbie znaków w łańcuchu. Np:
varString = String(10," ")
Get #1,,varString
odczytuje 10 bajtów z pliku o numerze 1. |
Przykład użycia rozkazu Get:
Dim recRekord As Record 'Record jest typem użytkownika
Open "FILE" For Random As #1 Len=Len(varRekord) 'otwarcie pliku
Get #1,2,varRekord 'odczytanie 2 rekordu z pliku
Close #1 'zamknięcie pliku
(Zmienne, typy zmiennych, funkcja Len, rozkazy Open i Close zostały opisane w innych częściach kursu.
na górę strony...
|