background image

Podstawy Programowania

Wyk ad dziesi ty:

ł

ą

Pliki

background image

1. Pliki – podstawowe wiadomo ci

ś

 
Je li dane,  które przetwarza  lub produkuje  program  komputerowy maj   by

ś

ą

ć

dost pne   po   zako czeniu   jego   pracy,   to   musz   one   zosta   przechowane

ę

ń

ą

ć

w   pami ci   masowej   komputera.   Pami

  tego   typu   jest   urz dzeniem

ę

ęć

ą

pozwalaj cym  zachowa  zapisane w niej informacje w sposób trwa y. Takimi

ą

ć

ł

urz dzeniami s  np.: dyski twarde, p yty CD, DVD i pami ci typu Flash. Ka de

ą

ą

ł

ę

ż

z   tych   urz dze   przechowuje   dane   w   inny   sposób.   Aby   ujednolici   sposób

ą

ń

ć

korzystania   ze   zgromadzonych   na   nich   informacji   wprowadzono   specjalną
struktur   danych   nazywan   plikiem.   Pliki   gwarantuj   ten   sam   sposób

ę

ą

ą

korzystania   z   informacji   niezale nie   od   tego,   czy   znajduj   si   one   na   dysku

ż

ą

ę

twardym, w pami ci operacyjnej, czy innym no niku. W przypadku wi kszo ci

ę

ś

ę

ś

wspó czesnych   systemów   komputerowych   urz dzenia   zewn trzne,   takie   jak

ł

ą

ę

klawiatura,   ekran,   dysk   twardy,   nap d   CD,   drukarki   s   „widziane”   przez

ę

ą

programy   komputerowe   w a nie   jako   pliki.   J zyk   Pascal   pozwala   korzysta

ł ś

ę

ć

z trzech rodzajów plików: plików tekstowych, plików binarnych zdefiniowanych

1

i   plików   binarnych   niezdefiniowanych   (amorficznych).   Pliki,   niezale nie   do

ż

którego   rodzaju   nale

,   sk adaj   si   zawsze   z   pewnych   elementów.

żą

ł

ą

ę

W przypadku plików tekstowych tymi elementami s  wiersze, czyli ci gi znaków

ą

ą

zako czone znakami ko ca wiersza (w przypadku Turbo Pascala s  to znaki

ń

ń

ą

#13#10).   Wynika   st d,   e   wiersze   te   mog   mie   ró ny   rozmiar.   Elementami

ą

ż

ą

ć

ż

plików binarnych zdefiniowanych s  warto ci okre lonego przez nas typu. Mog

ą

ś

ś

ą

to by  warto ci typu  

ć

ś

byte, integer, real

, a nawet typu rekordowego. W plikach

amorficznych (binarnych niezdefiniowanych) warto ci, które s  przechowywane

ś

ą

nie   maj   okre lonego   typu.   Ca y   plik   jest   podzielony   na   porcje   o   ustalonej

ą

ś

ł

wielko ci,   zwane   blokami.   Dla   wszystkich   typów   plików   mo emy   stosowa

ś

ż

ć

dost p sekwencyjny, tzn. taki, w którym aby przeczyta  lub zapisa  element

ę

ć

ć

znajduj cy   si   w   dowolnym   miejscu   pliku   musimy   przeczyta   wszystkie

ą

ę

ć

elementy  znajduj ce  si   przed  nim.  W   przypadku   plików  binarnych  mo emy

ą

ę

ż

mie   równie  swobodny  dost p  do  elementów  plików

ć

ż

ę

2

.  Pliki  binarne  mo emy

ż

zatem potraktowa  jako tablice, których rozmiar jest zmienny. 

ć

2. Typy plików

W Turbo Pascalu jedynym typem plików, który powinni my zdefiniowa  jest typ

ś

ć

pliku binarnego zdefiniowanego. Typ pliku binarnego zdefiniowanego okre lamy

ś

w sekcji type programu lub podprogramu wed ug wzorca:

ł

nazwa_typu_pliku = file of nazwa_typu_elementu_pliku;

1 Nazywanych krótko plikami binarnymi. 
2  Tzn. mo emy wskaza  dowolny element, który chcemy przeczyta / zmodyfikowa , bez

ż

ć

ć

ć

konieczno ci przegl dania elementów je poprzedzaj cych.

ś

ą

ą

2

background image

Przyk adowo,   plik   binarny,   którego   elementy   by yby   typu  

ł

ł

integer

  mia by   na

ł

-

st puj c  definicj  typu:

ę

ą ą

ę

Pliki   amorficzne,   jak   równie   tekstowe   maj   ju   zdefiniowane   typy,   które   s

ż

ą

ż

ą

cz

ci  j zyka i nie musimy im nadawa  nowej nazwy (cho  istnieje taka mo li

ęś ą ę

ć

ć

ż -

wo

). Typem pliku binarnego niezdefiniowanego jest po prostu  

ść

file

, a typem

pliku tekstowego jest text. 

3.  Zmienne plikowe

Podobnie   jak   zmienne   innych   typów   zmienne   plikowe   mo emy   deklarowa

ż

ć

w   sekcji  var  programu   lub   podprogramu.   W   przypadku   plików   binarnych
zdefiniowanych   nale y   wcze niej   zdefiniowa   typ   takiej   zmiennej   wed ug   za

ż

ś

ć

ł

-

mieszczonego   wy ej   wzorca,   gdy   zmiennych   plikowych   tego   rodzaju   o   ano

ż

ż

-

nimowych typach nie b dziemy mogli przekaza  przez parametr. Nie wymagaj

ę

ć

ą

tego   zmienne   plikowe   zwi zane   z   plikami   tekstowymi   lub   amorficznymi.   Nie

ą

mo emy   deklarowa   zmiennych   plikowych   zainicjalizowanych.   Jedynym   spo

ż

ć

-

sobem, w jaki mo emy przekaza  zmienn  plikow  do procedury lub funkcji za

ż

ć

ą

ą

pomoc  parametru jest przekazanie przez zmienn  (adres). 

ą

ą

4. Operacje na plikach

 
Zanim   b dziemy   mogli   zapisa   lub   odczyta   informacje   z   pliku   musimy   wy

ę

ć

ć

-

kona  dodatkowe czynno ci. Schemat korzystania z pliku mo e by  przedsta

ć

ś

ż

ć

-

wiony nast puj co:

ę

ą

1. skojarzenie zmiennej z plikiem,

2. otwarcie pliku,

3. przetwarzanie informacji zawartych w pliku,

4. zamkni cie pliku.

ę

Nale y   zaznaczy ,   e   przy   wykonywaniu   prawie   ka dej   z   tych   operacji   mog

ż

ć ż

ż

ą

pojawi  si  wyj tki

ć

ę

ą

3

, które nale y obs u y . Powy sze operacje s  realizowane

ż

ł ż ć

ż

ą

za   pomoc   ró nych   funkcji   i   procedur.   Nazwy   tych   podprogramów  mog   si

ą

ż

ą

ę

3 Inaczej nazywane b dami, cho  nie jest to nazwa w pe ni adekwatna.

łę

ć

ł

3

type 

   plik = file of integer; 

background image

ró ni   w   zale no ci   od   typu   pliku,   na   którym   zostan   u yte.   Zosta y   one

ż ć

ż

ś

ą

ż

ł

zebrane w tabelk :

ę

  Nazwa operacji

Typ pliku

Skojarzenie

Otwarcie

Odczyt

Zapis

Zamkni cie

ę

Plik tekstowy

assign

rewrite 

reset

append

read 

readln

write 

writeln

close

Plik binarny 

assign

rewrite 

reset

read

write

close

Plik amorficzny

assign

rewrite 

reset

blockread

blockwrite

close

    
Procedura assign dzia a w ten sam sposób dla wszystkich typów plików. Wi

e

ł

ąż

ona zmienn  plikow  z nazw  pliku. Pierwszym parametrem jej wywo ania jest

ą

ą

ą

ł

nazwa zmiennej plikowej, a drugim ci g znaków b d cy nazw  pliku. W Turbo

ą

ę ą

ą

Pascalu

4

  nazwa   pliku   sk ada   si   maksymalnie   z   jedenastu   liter   lub   cyfr.

ł

ę

Pierwszych osiem liter jest nazw  w a ciw , a trzy ostatnie stanowi  tak zwane

ą

ł ś

ą

ą

rozszerzenie,   które   okre la   zawarto

  pliku.   Obie   te   cz

ci   nazwy   pliku   s

ś

ść

ęś

ą

rozdzielone kropk . Istniej  te  pliki o specjalnych nazwach, które zwi zane s

ą

ą

ż

ą

ą

z urz dzeniami. Takimi plikami s  

ą

ą LPR1  lub  PTR  zwi zane z drukark ,  

ą

ą CON

zwi zany z konsol  (klawiatura + ekran monitora),  

ą

ą

COM1

  zwi zany z portem

ą

szeregowym. Po skojarzeniu zmiennej plikowej z plikiem mo emy go otworzy .

ż

ć

W tym wypadku zachowanie poszczególnych procedur otwieraj cych ró ni si

ą

ż

ę

w zale no ci   od   typu   otwieranego   pliku.   Dla   plików   tekstowych   procedura

ż

ś

rewrite

  tworzy nowy plik, który mo na wy cznie zapisywa . Procedura  

ż

łą

ć

reset

otwiera istniej cy plik w trybie tylko do odczytu, natomiast procedura 

ą

append

otwiera istniej cy plik w trybie do dopisywania, co oznacza,  e nowe informacje

ą

ż

b d  w tym pliku zapisywane za ju  istniej cymi. Wszystkie te procedury, jako

ę ą

ż

ą

parametr   wywo ania   przyjmuj   zmienn   plikow   skojarzon   z   plikiem,   który

ł

ą

ą

ą

ą

ma zosta  otwarty. W przypadku plików binarnych zdefiniowanych procedura

ć

rewrite

5

  tworzy   nowy   plik,   natomiast   procedura  reset  otwiera   plik,  który   już

istnieje. W obu przypadkach mo liwe jest odczytywanie i zapisywanie do pliku.

ż

Podobnie,   jak   poprzednio   jedynym   parametrem   wywo ania   tych   procedur   s

ł

ą

zmienne   plikowe,   na   których   operacja   ma   zosta   wykonana.   W   przypadku

ć

plików amorficznych, procedury  rewrite  i  reset  maj  takie samo dzia anie, jak

ą

ł

dla   plików   binarnych   zdefiniowanych,   ale   mog   przyjmowa   dodatkowy

ą

ć

parametr wywo ania, b d cy liczb  okre laj c  wielko

 (w bajtach) bloku, jaki

ł

ę ą

ą

ś

ą ą

ść

4 Dok adniej w systemie DOS, dla którego kompilator Turbo Pascala jest przeznaczony.

ł

5 Je li   procedura  

ś

rewrite  

zostanie   u yta   dla   istniej cego   pliku,   to   skasuje   jego   zawarto

,

ż

ą

ść

niezale nie od jego typu.

ż

4

background image

mo na   jednorazowo   zapisa   lub   odczyta   z   takiego   pliku.   Je li   sami   nie

ż

ć

ć

ś

okre limy rozmiaru bloku, to zostanie przyj ty rozmiar domy lny równy 128

ś

ę

ś

bajtów.   Do   odczytu   plików   tekstowych   mo emy   zastosowa   znane   ju   nam

ż

ć

ż

procedury  read  i  readln.  Domy lnie   te   procedury   zwi zane   s   z   plikiem

ś

ą

ą

o nazwie  Input,   czyli   po   prostu   z   klawiaturą

6

.   Je li   jednak   jako   pierwszy

ś

parametr ich wywo ania podamy nazw  zmiennej plikowej, to odczyt zamiast

ł

ę

z klawiatury b dzie odbywa  si  z pliku. Po nazwie zmiennej plikowej wyst puje

ę

ł

ę

ę

lista   sk adaj ca   si   co   najmniej   z   jednej   zmiennej   do   której   b d   wczytane

ł

ą

ę

ę ą

informacje z pliku. Ró nica mi dzy  

ż

ę

  readln

  i read   polega na tym,  e pierwsza

ż

odczytuje ca y wiersz znaków, zako czony znakami ko ca wiersza, natomiast

ł

ń

ń

druga czyta tyle informacji, ile wynika z liczby i typu zmiennych do których one
b d   zapisywane.   W   przypadku   plików   binarnych   zdefiniowanych   odczyt

ę ą

mo liwy   jest   wy cznie   za   pomoc   procedury  

ż

łą

ą

read

.   Pierwszym   parametrem

wywo ania tej procedury jest zmienna plikowa, natomiast nast pnymi zmienne

ł

ę

(w liczbie co najmniej jeden), do których informacje b d  zapisane. Typy tych

ę ą

zmiennych   musz   by   takie   same   lub   zgodne   z   typem   elementów   pliku.

ą

ć

W przypadku plików amorficznych odczyt jest mo liwy tylko za po rednictwem

ż

ś

procedury blockread. Ta procedura mo e przyjmowa  trzy lub cztery parametry

ż

ć

wywo ania.   Pierwszym   jest   zmienna   plikowa,   drugim   zmienna   do   której   ma

ł

zosta   zapisana   informacja,   a   trzecim   zmienna,   warto

  lub   wyra anie   typu

ć

ść

ż

word

,   okre laj ce   ile   bloków   chcemy   z   pliku   odczyta .   Czwarty   parametr

ś

ą

ć

wywo ania   jest   opcjonalny   i   jest   nim   zmienna   typu  

ł

word

,   w   której   jest

zapisywana liczba faktycznie przeczytanych bloków. Je li nie umie cimy tego

ś

ś

argumentu   na   li cie   parametrów   wywo ania   procedury  

ś

ł

blockread

,   to

w przypadku, kiedy zostanie odczytana mniejsza ni  chcieli my liczba bloków

ż

ś

z pliku program zako czy si  natychmiast sygnalizuj c b d wykonania. Je li

ń

ę

ą

łą

ś

przeka emy czwarty parametr, to mo emy obs u y  ten wyj tek. Zapis do pliku

ż

ż

ł ż ć

ą

równie  odbywa si  w ró ny sposób, w zale no ci od rodzaju pliku. Do plików

ż

ę

ż

ż

ś

tekstowych mo emy zapisywa  informacje za pomoc  

ż

ć

ą write i writeln. Podobnie

jak   w   przypadku   procedury  read  i  readln  domy lnie   s   one   skojarzone

ś

ą

z plikiem  Output,   czyli   ekranem   monitora

7

.   Je li   jako   pierwszy   parametr

ś

wywo ania   tej   procedury   umie cimy   zmienn   plikow ,   to   zapis   informacji

ł

ś

ą

ą

nast pi do pliku z ni  zwi zanego. Za tym parametrem, mog  wyst powa  inne

ą

ą

ą

ą

ę

ć

b d ce zmiennymi, wyra eniami lub wprost - warto ciami, które maj  zosta

ę ą

ż

ś

ą

ć

zapisane   do   pliku.   Procedura  writeln  zapisuje   do   pliku   wiersze   zako czone

ń

znakami ko ca wiersza. Natomiast procedura 

ń

write

 nie umieszcza w pliku tych

znaków   samodzielnie.   Do   zapisu   plików   binarnych   zdefiniowanych   u ywana

ż

jest wy cznie procedura 

łą

write

. Sposób wywo ania tej procedury jest taki sam,

ł

jak   w   przypadku   plików   tekstowych.   Pliki   amorficzne   mog   by   zapisywane

ą

ć

6 Plik skojarzony z klawiatur  nazywany jest równie  standardowym wej ciem.

ą

ż

ś

7 Plik ten nazywany jest równie  standardowym wyj ciem.

ż

ś

5

background image

przy pomocy procedury blockwrite. Jej parametry wywo ania s  takie same, jak

ł

ą

w przypadku procedury  blockread, z tym  e odnosz  si  one do zapisu, a nie

ż

ą

ę

odczytu. Operacja zamykania pliku jest przeprowadzana w ten sam sposób dla
wszystkich   rodzajów   plików   –   przy   pomocy  procedury  close.   Jedynym
parametrem wywo ania tej procedury jest zmienna plikowa.

ł

5. Inne operacje zwi zane z plikami

ą

W j zyku Pascal zdefiniowano szereg procedur i funkcji, które wykonuj  inne

ę

ą

pomocne   operacje   na   plikach,   ni   te,   które   opisano   wy ej.   Oto   niektóre

ż

ż

z nich wraz, z krótkim opisem:



funkcja  eof  zwraca   warto

 

ść true,   je li   zosta   osi gni ty   koniec   pliku.

ś

ł

ą

ę

Dzia a   dla   wszystkich   typów   plików.   Jej   parametrem   wywo ania   jest

ł

ł

nazwa zmiennej plikowej, je li zostanie ona pomini ta, to wywo anie to

ś

ę

ł

b dzie si  odnosi o do standardowego wej cia,

ę

ę

ł

ś



funkcja  seekeof  dzia a   podobnie,   ale   tylko   dla   plików   tekstowych

ł

i ignoruje znaki bia e (spacja, powrót karetki, itp.),

ł



funkcja  eoln  dzia a   jedynie   dla   plików   tekstowych   i   zwraca  

ł

true

,   je li

ś

zosta  osi gni ty koniec wiersza,

ł

ą

ę



funkcja  seekeoln  dzia a  podobnie, ale  ignoruje  znaki spacji  i tabulacji,

ł

jest przeznaczona wy cznie dla plików tekstowych,

łą



funkcja  filesize  zwraca   liczb   elementów   pliku   binarnego   lub   liczb

ę

ę

bloków pliku amorficznego,



funkcja  filepos  dzia a   dla   plików   binarnych   i   amorficznych,   zwraca

ł

warto

 typu 

ść

longint

, która oznacza pozycj  wska nika pliku,

ę

ź



procedura  seek  ustawia   pozycj   wska nika   pliku

ę

ź

8

.   Pierwszym

argumentem jej wywo ania jest nazwa zmiennej plikowej, drugim warto

ł

ść

nowej pozycji wska nika pliku. Warto

 ta jest typu  

ź

ść

longint

.  Procedura

seek

 jest przeznaczona dla plików binarnych i amorficznych,



procedura truncate „ucina” plik pocz wszy od bie

cej pozycji wska nika

ą

żą

ź

pliku, dzia a dla plików binarnych i amorficznych,

ł

8 O wska niku pliku mo emy my le  jak o indeksie tablicy. Jest on przesuwany automatycznie

ź

ż

ś ć

po wykonaniu ka dego odczytu lub zapisu zawarto ci pliku.

ż

ś

6

background image



funkcja  ioresult  zwraca kod wykonania operacji na pliku, je li operacja

ś

przebieg a   prawid owo,   to   kod   ten   jest   równy   zero,   w   przeciwnym

ł

ł

przypadku   jest   to   warto

  ró na   od   zera,   aby   ta   funkcja   dzia a a

ść

ż

ł ł

prawid owo nale y wy czy  dyrektyw  

ł

ż

łą

ć

ę $I kompilatora.

Opisana   wcze niej   funkcja  

ś

eof

  jest   dosy   cz sto   stosowana,   kiedy

ć

ę

konstruujemy p tl , w której umieszczamy instrukcje odczytuj ce z pliku. Je li

ę ę

ą

ś

jest to p tla 

ę

while

, to warunek w tej p tli ma posta : 

ę

ć not eof(zp), natomiast je li

ś

jest   to   p tla  

ę

repeat   ...   until

,   to   warunkiem   zako czenia   jest  

ń

eof(zp)

.

W przypadku plików binarnych i amorficznych mo liwe jest u ycie do odczytu

ż

ż

p tli  

ę

for

.   Poni ej   znajduj   si   przyk ady   programów   operuj cych   na

ż

ą

ę

ł

ą

odpowiednio: plikach tekstowych, binarnych i amorficznych.

7

program pliki_tekstowe;

uses crt;

var T:text;

procedure zapisz(var F:text);

{Zapisuje do pliku tekstowego 10 wierszy pobranych od u ytkownika.}

ż

var

   a:string[80];

   i:byte;

begin

  rewrite(F);

  for i:=1 to 10 do

    begin

       readln(a);

       writeln(F,a);

    end;

  close(f);

end;

procedure odczytaj(var F:text);

{Odczytuje z pliku tekstowego 10 wierszy.}

var

background image

Zmienna plikowa, typu text jest kojarzona z plikiem o nazwie dane.txt w bloku
g ównym   programu.   Plik   ten   tworzony   jest   w   procedurze  

ł

zapisz

,   w   wyniku

wywo ania procedury 

ł

rewrite

. W tej te  procedurze do pliku zapisywanych jest

ż

dziesi

  wierszy   (p tla  

ęć

ę

for

)   zawieraj cych   ci gi   znaków   podane   przez

ą

ą

u ytkownika (o wielko ci maksymalnie 80 znaków). Procedura 

ż

ś

odczyt

 odczytuje

te dane z tego samego pliku. Odczytanie i wy wietlenie na ekran odbywa si

ś

ę

wewn trz p tli 

ą

ę

repeat

. W obydwu procedurach ostatni  wykonywan  instrukcj

ą

ą

ą

jest zamkni cie pliku.

ę

8

   a:string[80];

begin

  reset(F);

  repeat

    readln(f,a);

    writeln(a);

  until eof(f);

  close(f);

end;

begin

   clrscr;

   assign(T,'dane.txt');

   zapisz(T);

   clrscr;

   odczytaj(T);

   readln;

end.

program plik_binarny;

uses

    crt;

type

    rec = record

            x,y:integer;

    end;

    pl_rec = file of rec;

background image

9

var

   plik:pl_rec;

procedure zapisz(var f:pl_rec);

var

  r:rec;

  i:byte;

begin

  {$I-}rewrite(f);{$I+}

  if ioresult <> 0 then exit;

  for i:=1 to 5 do

     begin

       with r do

         begin

           writeln('Podaj x');

           readln(x);

           writeln('Podaj y');

           readln(y);

         end;

         write(f,r);

     end;

   close(f);

end;

procedure append_bin(var f:pl_rec);

begin

  {$I-}reset(f);{$I+}

  if ioresult <> 0 then halt(1);

  seek(f,filesize(f));

end;

background image

10

procedure dopisz(var f:pl_rec);

var

   r:rec;

begin

   writeln('Podaj x');

   readln(r.x);

   writeln('Podaj y');

   readln(r.y);

   append_bin(f);

   write(f,r);

   close(f);

end;

procedure wypisz(var f:pl_rec);

var

  r:rec;

begin

  {$I-}reset(f);{$I+}

  if IOResult <> 0 then exit;

  while not eof(f) do

    begin

      read(f,r);

      write(r.x,' ');

      write(r.y);

      writeln;

    end;

    close(f);

end;

begin

  clrscr;

  assign(plik,'dane.dat');

  zapisz(plik);

  writeln('Naci nij Enter.');

ś

  readln;

background image

Powy szy   program   przetwarza   informacje   zawarte   w   pliku   binarnym

ż

zdefiniowanym, którego elementami s  rekordy. Taki rodzaj pliku nazywa si

ą

ę

krótko   plikiem   rekordowym.   Ka dy   rekord   zawiera   dwa   pola  

ż

x

  i  y,   które

przechowuj   liczby   ca kowite.   Zadaniem   programu   jest   utworzenie   pliku

ą

ł

o   nazwie  dane.dat,   zapisanie   do   niego   pi ciu   rekordów   zawieraj cych   dane

ę

ą

pobrane   od   u ytkownika,   zamkni cie   go,   nast pnie   ponowne   otwarcie,

ż

ę

ę

dopisanie   jednego   rekordu   na   ko cu   tego   pliku   i   wypisanie   zawarto ci

ń

ś

wszystkich rekordów z pliku na ekran. Warto zwróci  uwag  na definicj  pliku

ć

ę

ę

rekordowego,   jak   równie   na   procedur  

ż

ę append_bin.   Poniewa   procedura

ż

append

  dzia a tylko dla plików tekstowych, w programie zosta a zdefiniowana

ł

ł

osobna procedura dla plików binarnych zdefiniowanych. Otwiera ona taki plik
przy   pomocy  reset  i   ustawia   jego   wska nik   za   pomoc   procedury  

ź

ą

seek

  za

ostatnim   elementem   pliku.   Jego   po o enie   jest   ustalane   za   pomoc   funkcji

ł ż

ą

filesize

  –  elementy   pliku   s   numerowane   od   zera,   wi c   pozycja   ostatniego

ą

ę

elementu   ma   warto

  równ   liczbie   elementów   w   pliku   minus   jeden.   Warto

ść

ą

równie   zauwa y ,   e   wyj tki   jakie   mog   spowodowa   procedury   otwierania

ż

ż ć ż

ą

ą

ć

plików   s   obs ugiwane   za   pomoc   funkcji  

ą

ł

ą

ioresult

.   Aby   nie   by y   one

ł

obs ugiwane   domy lnie   przez   kompilator   nale y   wy czy   przed   wykonaniem

ł

ś

ż

łą

ć

danej operacji na pliku dyrektyw  

ę $I kompilatora ({$I-}), a nast pnie w czy  j

ę

łą

ć ą

po   wykonaniu   tej   operacji  ({$I+}).   Podobnie   mo na   obs ugiwa   wyj tki

ż

ł

ć

ą

pochodz ce   od   innych   operacji   na   pliku,   ale   w   ich   przypadku   w   programie

ą

zosta a   zostawiona   obs uga   domy lna.   Funkcja  

ł

ł

ś

ioresult

  mo e   odczyta   kod

ż

ć

b du tych operacji tylko przy wy czonej dyrektywie 

łę

łą

$I

11

  clrscr;

  wypisz(plik);

  writeln('Naci nij Enter.');

ś

  readln;

  clrscr;

  dopisz(plik);

  wirteln('Naci nij Enter.');

ś

  readln; 

  wypisz(plik);

  writeln('Naci nij Enter.');

ś

  readln;

end.

background image

12

program plik_amorficzny_i_tablica;

uses

    crt;

type

    tablica_losowa = array [1..1000] of word;

var

  tl:tablica_losowa;

  pl:file;

procedure wypelnij_i_zapisz(var F:file; var x:tablica_losowa);

{Wype nia i zapisuje do pliku amorficznego tablic  1000 elementów typu word.}

ł

ę

var

  l,i:word;

begin

   randomize;

   for i:=1 to 1000 do x[i] := random(100);

   for i:=1 to 1000 do write(x[i]:4);

   {$I-}rewrite(F,sizeof(x));{$I+}

   if IOResult <> 0 then exit;

   blockwrite(F,x,1,l);

   if l<>1 then exit;

   close(F);

end;

procedure odczytaj_i_pokaz(var F:file; var x:tablica_losowa);

{Wype nia tablic  1000 elementów typu word danymi z pliku.}

ł

ę

var

  l,i:word;

begin

   {$I-}reset(F,sizeof(x));{$I+}

   if IOResult <> 0 then exit;

   blockread(F,x,1,l);

   if l<>1 then  exit;

   for i:=1 to 1000 do write(x[i]:4);

background image

Ten   program   wype nia   tablice   o   1000   elementach   typu  

ł

word

  i   zapisuje   j ,

ą

a nast pnie odczytuje  z pliku  amorficznego.  Warto  zwróci  uwag  na  sposób

ę

ć

ę

u ycia procedur 

ż

blockread

 i blockwirte.

13

   close(F);

end;

begin

  assign(pl,'tablica.dat');

  clrscr;

  wypelnij_i_zapisz(pl,tl);

  writeln('Naci nij Enter.' );

ś

  readln;

  clrscr;

  odczytaj_i_pokaz(pl,tl);

  writeln('Naci nij Enter.' );

ś

  readln;

end.