Object Pascal/Przetwarzanie plików
Z Wikibooks, biblioteki wolnych podręczników.
[edytuj] Typy plików
W Object Pascalu istnieją trzy typy plików: pliki elementowe, tekstowe i amorficzne, ale omówimy tylko dwa pierwsze. Różnią się one sposobem deklaracji oraz sposobem odczytywania i zapisywania danych. Ogólny schemat obsługi plików w Object Pascalu:
- Stworzenie i skojarzenie zmiennej plikowej z plikiem.
- Otwarcie pliku.
- Odczyt lub/i zapis danych z/do pliku.
- Zamknięcie pliku.
Do otworzenia pliku używamy procedur reset(zmiennePlikowa) lub rewrite(zmiennaPlikowa). Do zamknięcia: Close(zmiennaPlikowa) Procedura reset otwiera plik i ustawia wskaźnik plikowy na jego początku (Przygotowuje plik do odczytu). Procedura rewrite otwiera plik i usuwa całą jego zawartość następnie ustawia wskaźnik plikowy na początku pliku. (Procedura ta tworzy plik, kiedy nie ma go na dysku) Procedura Close zamyka plik.
[edytuj] Pliki elementowe
Pliki elementowe są to pliki, w których zapisuje się jeden typ danych(np. integer, byte itd.). Deklaruje się je tak:
var nazwaZmiennej : file of typ;
Oto program pokazujący jak to działa:
program pliki1; var plik1 : file of integer; zmienna : integer; zmienna2 : integer; begin zmienna := 14354; zmienna2 := 2516; Assign(plik1, 'C:\integer.int'); {Skojarzenie zmiennej plikowej z plikiem na dysku} Rewrite(plik1); {Otworzenie zmiennej plikowej i usunięcie z niej danych (lub stworzenie nowego pliku)} write(plik1, zmienna, zmienna2); {Zapisanie zmiennej do pliku} Reset(plik1); {Powrót na początek pliku} read(plik1,zmienna2); {Odczytanie zmiennej z pliku} writeln(zmienna2); {Napisze "14354"} Close(plik1); {Zamknięcie pliku} readln; end.
[edytuj] Pliki tekstowe
Pliki tekstowe są to pliki, w których możemy zapisać tekst i traktować prawie tak jak standardowe wyjście. Deklaracja tych plików wygląda tak:
var nazwaZmiennej : text;
To prosty przykład:
program plikit; var Plik: Text; {zmienna plikowa tekstowa} begin assign(Plik, 'nowy.txt'); {przypisanie pliku do zmiennej} rewrite(Plik); {usunięcie danych z pliku} writeln(Plik, 'fasola bywa wesoła'); {wpisanie danych do pliku} close(Plik); {zapisanie pliku} end.
Plik nowy.txt w katalogu programu będzie teraz zawierał tekst "fasola bywa wesoła" bez względu na to, czy wcześniej istniał i czy coś zawierał.
W formacie tekstowym możemy zapisać dowolne dane, jednak kosztem tego, że operacje odczytu i zapisu będą bardziej skomplikowane - dlatego, że w plikach tekstowych musimy wszystko odczytywać po kolei. Oto program pokazujący jak to wszystko działa:
program plikit2; var plik : text; dana1 : string; dana2 : integer; dana3 : byte; tablica : array [0..10] of string; i : integer; begin dana1 := 'Hmm'; dana2 := 12412; dana3 := 123; Assign(plik, 'C:\plik.txt'); Rewrite(plik); writeln(plik, dana1, dana2); {Zapisanie danych do pliku (Odbywa się to tak samo, jak wypisywanie danych do konsoli)} writeln(plik, dana3); Close(plik); Reset(plik); {Otwarcie pliku w trybie do odczytu} i := 0; while not EOF(plik) do begin readln(plik, tablica[i]); i := i + 1; end; Close(plik); for i := 0 to 10 do begin writeln(tablica[i]); end; readln; end.
Jak widać program jest o wiele bardziej złożony. Oto co zostanie wypisane na ekran po uruchomienu programu:
Hmm12412 123
Do pisania do pliku wcale nie musisz otwierać pliku instrukcją Rewrite, która kasuje zawartość pliku! Instrukcja Append otwiera plik w trybie "do dopisu", w którym (jak sama nazwa mówi) dopisuje się dane do pliku. Należy pamiętać że procedurę Append możemy używać tylko i wyłącznie do obsługi plików tekstowych.