Typy plików w Pascalu
Patkoss
Język Pascal ze względu na swoją niezwykle elegancką składnie (podobnie jak Basic) do dziś jest używany w ośrodkach akademickich jako podstawowe narzędzie nauki metodyki programowania. Dalsze rozwijanie tego języka przez Borland'a w pakiecie Delphi (oraz Kylix) sprawia, że język ten znajduje także szerokie zastosowanie jako profesjonalne narzędzie zawodowych programistów. Pascal w stosunku do innych języków wyróżnia się niezwykle intuicyjną i elegancką obsługą plików.
W języku Pascal możemy wyróżnić trzy rodzaje plików. Każdy rodzaj pliku wymaga osobnej deklaracji zmiennej plikowej - reprezentującej zbiór dyskowy w naszym programie. I tak:
type typea=...
var filea: file of typea;
Jest to deklaracja pliku typowego o jasno zdefiniowanej strukturze. Każdy element tego pliku jest instacją struktury typu zdefiniowanego. Może to być typ prosty lub złożony, np.:
var file1: file of byte; {plik o elementach typu byte, po prostu liczby całkowite o rozm. 1b}
var file2: file of record {plik o elementach typu rekordowego}
id: byte;
nm: string[20];
end;
Mamy także pliki tekstowe:
var file_txt: text;
Pliki te to po prostu pliki textowe ASCII. Możemy też myśleć o takich plikach jak o zbiorach znaków ASCII. Ostatni typ plików w Pascalu to pliki beztypowe (amorficzne). Są to pliki o niejawnej strukturze. Może to być każdy plik znajdujący się na dysku. Traktowany jest jako ciąg bajtów o nieuporządkowanej strukturze:
var file_byt: file;
Każdy, z tych trzech typów plików jest reprezentowany w programie przez odbowiednią zmienną plikową. Do każdego z tych typów mamy podobne procedury i funkcje służące do zapisu/odczytu informacji i obsługi. Najważniejszą parą procedur z punktu widzenia plików typowych jest read/write (odczyt/zapis), plików textowych read/write oraz readln/writeln, plików amorficznych blockread/blockwrite. Oczywiście przed użyciem plik (jakiegokolwiek typu) należy otworzyć (ewentualnie stworzyć) oraz po użyciu zamknąć. Służą do tego procedury reset/rewrite oraz close. Aby było możliwe otwarcie pliku, należy zmienna plikową skojarzyć ze zbiorem na dysku (czyli fizycznym plikiem). Służy temu procedura assign. A oto przykładowy kod:
{typ rekordowy dla pliku typowego}
type rec=record
id: byte;
nm: string[20];
end;
{deklaracje zmiennych plikowych}
var ftyp: file of rec;
ftxt: text;
f : file;
dat : rec;
begin
{kojarzenie zmiennych ze zbiorami na dysku}
assign (ftyp, 'f_typ.dat');
assign (ftxt, 'f_txt.txt');
assign (f, 'file.swp');
{tworzenie fizycznych plików, reset()- służy do odtwarcie gdy pliki już istnieją}
rewrite (ftyp);
rewrite (ftxt);
rewrite (f,1);
{przy plikach amorficznych powinno się podawać wielkość
rekordu, jeśli by nie było tej jedynki to odczytywalibyśmy po
n*128 bajtów za każdym razem, co właściwie na pewno
spowoduje przepełnienie bufora; nam chodzi o n*1, stąd
ta jedynka - przyp ŁF}
dat.id:=173;
dat.nm:='Yding Skovhoj';
{zapisywanie informacji do...}
{pliku typowego}
write (ftyp, dat); {użyj read aby odczytać dane}
{pliku textowego}
writeln (ftxt, 'Yding Skovhoj i Danmark, hojhed: 173'); {readln do odczytu}
{pliku beztypowego}
blockwrite (f, dat, 1); {blockread do odczytu}
{zamknięcie nieużywanych plików}
close (ftyp); close (ftxt); close (f);
end.
Należy pamiętać, że w przypadku plików tekstowych writeln (w odróżnieniu od write) zapisuje znak przejścia do nowej lini na końcu wiersza. Należy także pamiętać, że w zależności od systemów należy różnie definiować ścieżki. Inaczej ścieżka wygląda w Windows, inaczej w Linux (Pascal w odróżnieniu od Javy nie jest w pełni przenośny - ale na pewno szybszy). W Object Pascalu plik możemy traktować również jako strumień, stosując podejście obiektowe.
1."Moim skromnym zdaniem Basic nie ma ładnej składni." ?? TO JEST PASCAL!
2.Mało! Mógłbyś się bardziej rozpisać np. o BlockRead() i BlockWrite().
W ogóle to artykuł przyzwoity