Programowanie
dr inż. Elżbieta Jasińska
1. Pliki
Plik są odwzorowaniem fizycznych zbiorów. W języku potocznym pojęć tych często nie rozróżnia się,
określając je, podobnie jak w języku angielskim, jednym terminem plik (file). W języku Delphi istnieją trzy
rodzaje plików:
• tekstowe,
• zdefiniowane (elementowe),
• niezdefiniowane (amorficzne).
Prowadzony kurs zawęża się do pracy na dwóch pierwszych.
Operacje na dowolnym pliku zapisać można w sposób uniwersalny, w zależności od rodzaju tego pliku
polecenia niezbędne do ich wykonania mogą się różnić.
1.1.
Wybrane procedury i funkcje uniwersalne dla plików tekstowych
i zdefiniowanych
• Assignfile (zmienna_plikowa, nazwa_zbioru_typu_łańcuchowego);
Np.
Assignfile (f, ‘a.txt’);
Procedura ta umożliwia skojarzenie zmiennej plikowej z fizycznym zbiorem danych o podanej ścieżce .
• Rewrite(zmienna_plikowa);
Np.
Rewrite(f);
Procedura powoduje utworzenie nowego fizycznego zbioru danych o nazwie skojarzonej wcześniej z podaną
zmienną plikową (otwarcie do zapisu). W przypadku gdy zbiór o takiej nazwie już istnieje, zostanie on
usunięty, a w jego miejscu zostanie utworzony nowy zbiór pusty. Zbiór po otwarciu ustawiany jest w pozycji
początkowej.
• Reset(zmienna_plikowa);
Np.
Reset(f);
Procedura ta służy do otwarcia pliku skojarzonego z już istniejącym zbiorem. (Otwarcie do odczytu). Zbiór po
Skojarzyć plik ze zmienną plikową
Otworzyć plik jeśli istnieje lub utworzyć go
Wykonać ciąg instrukcji na danych w pliku
Zamknąć plik
Programowanie
dr inż. Elżbieta Jasińska
otwarciu ustawiany jest w pozycji początkowej.
• Closefile(zmienna_plikowa);
Np.
Closefile(f);
Procedura zamyka fizyczny zbiór danych skojarzony ze zmienną plikową. Każdy plik, który został otwarty,
musi być zamknięty.
• Eof(zmienna_plikowa);
Np.
Eof(f);
Funkcja ta przyjmuje wartość logiczną TRUE gdy plik znajduje się w pozycji przed ostatnim znakiem zbioru
(znakiem Ctrl-Z) lub gdy zbiór nie zawiera żadnych elementów. W przeciwnym wypadku ma wartość FALSE.
1.2.
Pliki tekstowe
Pliki tekstowe zapisują informacje jako ciąg znaków (kodów ASCII) . Można w nich zapisywać wielkości
różnych typów oraz stosować formatowanie zapisu. Pliki te umożliwiają wyłącznie dostęp sekwencyjny do
zawartych w nich danych. Oznacza to, że aby odczytać wartość określonego elementu, należy wcześniej
przeczytać to co jest przed nim.
1.2.1. Procedury i funkcje przetwarzania plików tekstowych
• Append(zmienna_plikowa);
Np.
Append(f);
Procedura otwiera plik skojarzony ze zmienną plikową i ustawia zbiór na pozycji końcowej (otwarcie do
dopisywania).
• Eoln(zmienna_plikowa);
NP.
Eoln(f);
Funkcja, której wartość logiczna jest TRUE gdy plik znajduje się w pozycji znaku końca wiersza (tj. znaku
CR) lub gdy wartością funkcji Eof dla tej samej zmiennej plikowej jest TRUE. W przeciwnym wypadku
wartością funkcji jest FALSE.
• Read(zmienna_plikowa,lista_zmiennych);
lub
• Readln(zmienna_plikowa,lista_zmiennych);
Np.
• Read(f, X,Y,Z);
lub
• Readln(f, X,Y,Z);
Programowanie
dr inż. Elżbieta Jasińska
Procedury te służą do czytania elementów z plików. Pierwszym parametrem tych procedur jest odpowiednia
zmienna plikowa, po której następują oddzielone przecinkami nazwy czytanych zmiennych. Po
każdorazowym odczytaniu wartości pojedynczej zmiennej następuje automatyczne przesunięcie wskaźnika
do początku następnego elementu. W przypadku procedury Readln wskaźnik przesuwa się do początku
następnego wiersza.
• Write(zmienna_plikowa,lista_argumentów);
lub
• Writeln(zmienna_plikowa,lista_argumentów);
Np.
• Write (f, X,Y,Z);
lub
• Writeln (f, X,Y,Z);
Procedury powyższe umożliwiają wprowadzanie elementów do plików. Podobnie jak w przypadku czytania,
pierwszym parametrem tych procedur jest identyfikator odpowiedniej zmiennej plikowej, odpowiadającej
otwartemu uprzednio plikowi. Wywołanie procedur powoduje zapisanie do fizycznego zbioru odpowiednich
wielkości. Po każdorazowym zapisaniu wartości pojedynczej zmiennej następuje automatyczne przesunięcie
wskaźnika do początku następnego elementu. W przypadku procedury Writeln wskaźnik przesuwa się do
początku następnego wiersza.
• SeekEof (zmienna_plikowa);
Np.
SeekEof (f);
Funkcja ta daje takie same wyniki jak funkcja Eof, z tym że ignoruje najbliższe spacje, znaki tabulacji oraz
znaki CR i LF.
• SeekEoln (zmienna_plikowa);
Np.
• SeekEoln (f);
Funkcja ta daje takie same wyniki jak funkcja Eoln, z tym że ignoruje najbliższe spacje, znaki tabulacji oraz
znaki CR i LF.
Wyżej wymienione procedury maja zastosowanie do operacji na plikach tekstowych, dla operacji na plikach
zdefiniowanych widoczne są pewne różnice.
1.3.
Pliki zdefiniowane
Pliki zdefiniowane wykorzystują w zapisie reprezentację maszynową. W przypadku pliku zdefiniowanego
możliwy jest zapis i odczyt wielkości wyłącznie jednego typu składowego. Pliki te są plikami o dostępie
swobodnym, co oznacza, że w każdym momencie możliwy jest dostęp do dowolnego elementu pliku.
Programowanie
dr inż. Elżbieta Jasińska
Plik zdefiniowany jest struktura składającą się z danych tego samego typu, np. Byte lub Real. Dlatego aby
móc przedstawić dane różnego typu stosuje się deklaracje własnego typu, najczęściej w postaci rekordu
(pkt.4.1 Wykład 1)
1.3.1. Procedury i funkcje przetwarzania plików zdefiniowanych
•FileSize(zmienna_plikowa);
Np.
FileSize(g);
Wartością funkcji jest rozmiar (LongInt) wyspecyfikowanego pliku. Funkcja ta zwraca liczbę elementów
danego pliku zdefiniowanego.
• FilePos(zmienna_plikowa);
Np.
FilePos(g);
Wartością funkcji jest liczba całkowita typu LongInt, podająca aktualną pozycje pliku skojarzonego ze
zmienną plikową .Wartość funkcji jest równa 0 jeżeli plik znajduje się w pozycji początkowej, natomiast gdy
plik znajduje się w pozycji końcowej wartość ta jest równa wartości funkcji FileSize.
Dlatego należy zwrócić uwagę na indeksowanie pozycji w pliku zdefiniowanym, ponieważ ustawieni kursora
przed pierwszym elementem, oznacza ustawieni go na pozycji 0.
• Seek(zmienna_plikowa, pozycja);
Np.
Seek(g,n);
Procedura ta umożliwia przesunięcie aktualnego położenia pliku do elementu o podanej liczbie porządkowej(
tutaj n), określonego parametrem pozycja typu LongInt.
Zapisywanie i odczytywanie plików zdefiniowanych odbywa się za pomocą standardowych procedur Read
oraz Write.