Pliki tekstowe
Obsługa plików typu tekstowego jest bardzo prosta. Prawie nie różni się od zwyczajnego używania procedur Write, WriteLn, Read, ReadLn. Najpierw jednak potrzebujemy otworzyć konkretny plik i zapamiętać jego uchwyt (miejsce przez które będziemy się z nim łączyli). Potem używamy odpowiednich procedur (Read, Write). Na koniec zamykamy plik. I to wszystko!
Otwieranie plików Kojarzenie plików odbywa się przed ich otwarciem, za pomocą procedury Assign(var F:File; FileName:string); Dzięki kojarzeniu przypisujemy pewnej zmiennej uchwyt, czyli miejsce w pamięci, które będzie identyfikować nasz plik.
W przypadku, gdy pracujemy na pliku tekstowym, uchwyt zmiennej będzie typu TEXT. W innych przypadkach może być FILE, albo FILE OF {…} nazwa jakiegoś rekordu własnego typu.
Otwieranie do odczytu Aby otworzyć plik do odczytu skorzystaj z procedury Reset(var F:FILE; [RecSize:Word]). Zmienna pierwsza typu FILE jest właśnie uchwytem do pliku, druga oznacza rozmiar odczytywanego rekordu, domyślnie 128.
Otwieranie do zapisu Do zapisu pliku służy procedura Rewrite(var F:FILE; [RecSize:Word]). Jej parametry skonstruowane podobnie jak Reset.
Przykłady użycia {naglowek i potrzebne zmienne}
program zapis_i_odczyt;
var F:Text;
s:string;
begin
{najpierw zapis do pliku}
Assign(F, 'plik.txt');
Rewrite(F);
WriteLn(F, 'Ala ma kota');
Close(F);
{teraz odczyt z pliku}
Assign(F, 'plik.txt');
Reset(F);
ReadLn(F, s);
Close(F);
WriteLn(s);
end.
Z plików tekstowych można odczytywać również liczby. Jeśli ma być ich wiele, muszą być oddzielone pojedynczymi spacjami. Wtedy podobnie jak wczytujemy z klawiatury, możemy użyć wczytywania z plików,
np. odczytanie trzech liczb z pliku, którego zawartość to:
1 2 3
wykonujemy za pomocą
ReadLn(F, a, b, c);
Gdy w następnej lini jest kilka innych liczb, niekoniecznie tyle samo, można wczytać je w kolejnej instrukcji ReadLn. Jednak programista musi czuwać nad tym, by nie wowołać pustego wczytywania, czyli takiego gdy plik się już skończył.
Uwaga!
Nie jest dobrze traktować plików binarnych (np. bitmapy) jako tekstowych i odczytywać ich zawartość po jednym znaku typu char (ani kopiować plików w ten sposób). Oczywiście całość zadziała i można wyświetlić taki rysunek lub skopiować plik, jednak wczytywanie z pliku bajt po bajcie (również zapisywanie) jest bardzo czasochłonne. Zwykła bitmapa może być wczytywana nawet kilka sekund! Za pomocą instrukcji BlockRead i BlockWrite można to zrobić w granicach kilkunastu milisekund.