background image

PODST AWY PROGRAM OWANIA

 

 

Pliki tekstowe 

 

Typ plikowy 

Programy,  które  pisaliśmy  do  tej  pory  komunikowały  się  z  otoczeniem  poprzez  klawiaturę,  z  której  pobierały 
dane  od  użytkownika,  oraz  monitor,  na  którym  wyświetlały  wyniki.  Urządzenia  te  mają  wspólną  cechę  – 
nietrwałość  informacji.  Program  nie  może  ponownie  pobrać  danych  z  monitora  i  ich  przetworzyć.  Do 
przechowywania  danych  i  wyników  służy  pamięć  zewnętrzna.  Program  może  zapisać  dane  na  dysk,  a  inny 
program  może  je  odczytać.  Do  ustalenia  pozostaje  forma  w  jakiej  dane  mają  być  zapisane.  Jedną  z  nich  jest 
zewnętrzny plik tekstowy. Do pliku tekstowego można dokładać znaki, wiersze, łańcuchy znaków. Z tego pliku 
można odczytać znaki w takiej kolejności w jakiej zostały zapisane. Z każdym plikiem związany jest wskaźnik 
pliku
, który wskazuje znak od którego rozpocznie się odczytywanie. 

Szczególnym przypadkiem pliku tekstowego jest konsola, która służy do komunikacji z użytkownikiem poprzez 
monitor i klawiaturę. Procedury 

write 

writeln 

dopisują tekst do pliku konsoli i wypisują na monitorze. 

Procedury 

read

 i 

readln 

wczytują tekst z klawiatury do konsoli i odczytują z konsoli. 

Obsługa plików wymaga: 

 opisu zmiennej plikowej w części deklaracyjnej programu, 

 skojarzenia zmiennej plikowej z plikiem fizycznym, 

 otwarcia pliku (do zapisu lub do odczytu), 

 wykonania niezbędnych operacji (czytanie, zapis i inne), 

 zamknięcia pliku. 

Zmienna plikowa    

Pośrednikiem pomiędzy programem a plikiem na dysku jest zmienna plikowa. Dla pliku tekstowego zmienna ta 
jest typu 

text 

(typ standardowy). Zmienna ta musi być zadeklarowana w części opisowej programu np.  

Var nazwa_zm_plikowej : text; 

Deklaracja nie mówi z którym plikiem na dysku związana jest zmienna plikowa. Zmienna ta jest uniwersalnym 
pośrednikiem pomiędzy programem a jakimś plikiem tekstowym na dysku. 

 Kojarzenie  zmiennej plikowej z plikiem zewnętrznym  

Kojarzenie  zmiennej plikowej z plikiem zewnętrznym odbywa się poprzez procedurę 

assign

 

ASSIGN (nazwa_zm_plikowej, nazwa_pliku zewnętrznego) 

Nazwa pliku zewnętrznego może być stałą tekstową ( podana w apostrofach) lub zmienną. Jeżeli plik znajduje 
się  w  innym  katalogu  niż  bieżący  to  jego  nazwa  powinna  być  poprzedzona  ścieżką  dostępu.  To  jest  jedyne 
miejsce  w  programie,  gdzie  występuje  nazwa  pliku  zewnętrznego.  Od  tego  momentu  program  będzie  się 
odwoływał do pliku poprzez zmienną plikową.  

Otwieranie pliku 

Do otwierania pliku służą procedury: 

REWRITE(nazwa_zm_plikowej) 

Procedura zakłada na dysku nowy plik skojarzony ze zmienną plikową do zapisu. Jeżeli plik o takiej nazwie już 
istnieje to zostanie skasowany a na jego miejsce powstanie plik pusty. Po otwarciu za pomocą tej procedury plik 
jest zawsze pusty. 

APPEND (nazwa_zm_plikowej) 

Procedura  otwiera  istniejący  już  plik  skojarzony  ze  zmienna  plikową  do  dopisywania  na  końcu  pliku,  za 
wszystkim co w tym pliku było zapisane. Jeżeli plik na dysku nie istnieje, to wystąpi błąd.  

RESET (nazwa zm_plikowej) 

Procedura  otwiera  i  istniejący  już  plik  do  odczytu.  Tekst  czytany  jest  w  takiej  kolejności  w  jakiej  był 
zapisywany. 

background image

PODST AWY PROGRAM OWANIA

 

 

Pliki tekstowe 

 

Zapisywanie 

Zapisywanie do pliku odbywa się przy pomocy procedur : 

WRITE (nazwa_zm_plikowej,wyrażenie tekstowe) 

Procedura zapisuje tekst z wyrażenia tekstowego na końcu ostatniego wiersza, nie powoduje rozpoczęcia 
nowego wiersza. 

WRITELN nazwa_zm_plikowej,wyrażenie tekstowe) 

Procedura zapisuje tekst z wyrażenia tekstowego na końcu ostatniego wiersza i rozpoczyna nowy wiersz. 
W  pliku  tekstowym  wszystko,  nawet  elementy  liczbowe,  zapisywane  jest  jako  tekst.  Przy  zapisie  procedurą 

writeln 

automatycznie  dopisywany  jest  znacznik  końca  wiersza.  Na  końcu  pliku  dopisywany  jest  znacznik 

końca pliku. 

Odczytywanie z pliku 

Do odczytywania z pliku służą procedury : 

READ (nazwa_zm_plikowej, zmienna

Procedura 

read 

zachowuje  się  różnie  w  zależności  od  tego  jakiego  typu  jest  zmienna,  do  której  wczytuje 

wartość. Dla zmiennej typu  

char 

po wczytaniu wskaźnik pliku przesuwa się do następnego znaku, a wczytany 

znak  jest  przypisany  zmiennej.  Nie  ma  podziału  na  wiersze,  znak  końca  wiersza  zostanie  wczytany  jak  każdy 
inny znak. Dla zmiennej typu 

string

 

read 

przeczyta wszystkie znaki od aktualnego położenia wskaźnika do 

ostatniego  znaku  w  wierszu.  Wskaźnik  pliku  zatrzyma  się  na  pierwszym  napotkanym  znaku  końca  wiersza. 
Kolejna procedura 

read

 ze zmienną typu 

string 

zwróci łańcuch pusty, bo wskaźnik pliku jest już na końcu 

wiersza, a procedura 

read

 czyta do końca wiersza. Dla zmiennej typu liczbowego procedura 

read

 przestawia 

wskaźnik pliku do pierwszej cyfry (pomija odstępy i znaki końca wiersza) i kończy wczytywanie po napotkaniu 
odstępu lub końca wiersza. Jeżeli wczytany ciąg znaków nie da się zamienić na liczbę wystąpi błąd. 

READLN (nazwa_zm_plikowej, zmienna) 

Procedura czyta wszystko do znaku końca wiersza i przenosi wskaźnik pliku do nowego wiersza. Można ta 
procedurą czytać szereg łańcuchów. 

Procedury i funkcje wykorzystywane do obsługi plików 

EOF(nazwa_ zm_plikowej)  

Funkcja logiczna, która przyjmuje wartość TRUE, gdy wskaźnik pliku pokazuje na znak końca pliku 

EOLN (nazwa_zm_plikowej) 

Funkcja logiczna, która przyjmuje wartość TRUE, gdy wskaźnik pliku pokazuje na koniec wiersza.   

Zamykanie pliku 

CLOSE (nazwa_zmiennej_plikowej

Procedura  zamyka  plik  skojarzony  ze  zmienną  plikową.  Każdy  plik  otwarty  w  programie  powinien  być 
zamknięty.    
 
Ćwiczenie 1 

• 

Napisz program, który założy na dysku w bieżącym katalogu plik tekstowy o nazwie 

kotek.txt 

 

i zapisze do niego tekst : 

Wszedl kotek na plotek 
i mruga. 

program p1; 
var f : text; 
begin 

background image

PODST AWY PROGRAM OWANIA

 

 

Pliki tekstowe 

 

assign(f, ’kotek.txt’); 
rewrite(f); 
writeln(f, ’Wszedl kotek na plotek’); 
write(f,’ i ‘); 
writeln(f, ’mruga’); 
close(f); 

end

• 

Sprawdź czy plik powstał na dysku i  jaka jest jego zawartość. 

• 

Zmień tekst zapisywany do pliku, uruchom program jeszcze raz, sprawdź jaka jest   teraz zawartość pliku  

• 

Zmodyfikuj program tak, aby plik 

kotek.txt 

powstał na dysku, w katalogu C:\TP (lub C:\BP). 

Uwagi: 

 Procedura 

rewrite 

ustawia znacznik pliku na początku i od początku pliku zapisuje tekst. 

 Procedura ta zastosowana do pliku, który już istnieje, nowy tekst zapisuje od początku   pliku zacierając  

dotychczasową zawartość pliku. 

 
Ćwiczenie 2 

• 

Napisz program, który na końcu pliku 

kotek.txt 

dopisze dowolny tekst wprowadzony z klawiatury  

i wyświetli na ekranie cały plik 

kotek.txt 

dwoma sposobami: znak po znaku i całymi wierszami. 

program p2; 
var 

f : text; 

      Tekst : string; 
 C 

:char; 

begin 
{                                  dopisywanie do pliku} 
assign (f,’kotek.txt’); 
append(f); 
writeln(‘podaj tekst’); 
readln(tekst); 
writeln(f,tekst); 
close

 (f);{                     czytanie pliku całymi wierszami}

 

reset(f); 
while not eof(f) do  

begin 
readln
(f , tekst); 
writeln(tekst); 
end

close(f); 
{                                czytanie pliku znak po znaku} 
reset(f); 
while not eof(f) do 
 

begin 

 while 

not eoln(f) do 

  begin 

read (f,c); 
write(c); 
end; 

 

readln(f);                   {1} 

 writeln; 
 

end;  

close(f); 

end

Uwagi: 

 Instrukcja oznaczona {1} ma przeczytać znacznik końca linii zapisany przez instrukcję 

writeln 

 

i przywrócić funkcji 

eoln

 wartość False  

• 

Zastosuj powyższy program do wyświetlenia pliku 

piesek.txt

. Jak zakończył się program?. 

background image

PODST AWY PROGRAM OWANIA

 

 

Pliki tekstowe 

 

Ćwiczenie 3 

• 

Napisz  funkcję  logiczną,  która  przyjmie  wartość  True,  gdy  uda  się  skojarzyć  zmienną  plikową  z  plikiem 
fizycznym i otworzyć go do odczytu (

reset

). W przeciwnym razie funkcja przyjmuje wartość False.  

function jest_plik_1(s:string):boolean; 
var f:text; 
begin 
assign
(f,s); 

{

$

I-} reset (f); {

$

I+} 

if IOResult = 0 then  

begin 

close(f); 

 

jest_plik_1 := true; 

 

end 

else jest_plik_1 := false; 
end; {funkcji jest_plik_1}  

Uwagi

 Jeżeli  pliku  nie  ma  to  próba  otwarcia  go  do  odczytu  procedurą 

reset 

powoduje  błąd.  Trzeba  więc 

przechwycić  kontrolę  nad  tym  błędem  i  sprawdzić  czy  wystąpił.  Dyrektywa  kompilatora  $I-  powoduje 
wyłączenie  ,  a  dyrektywa    $I+  włączenie  sprawdzania  poprawności  wykonania    instrukcji  wejścia-wyjścia. 
Jeżeli  zawarta  pomiędzy  nimi  procedura 

reset 

spowoduje  błąd  (bo  plik  nie  będzie  istniał),  program  nie 

zakończy  swojego działania komunikatem o błędzie, a kod błędu określi wartość funkcji 

IOResult

.     

 

IOResult 

jest funkcją standardową modułu System, która podaje, w postaci liczby całkowitej typu Word, 

status ostatnio wykonanej operacji wejścia wyjścia, pod warunkiem, że nie jest aktywna systemowa kontrola 
warunków wejścia–wyjścia (może być wyłączona dyrektywą kompilatora  $I-). Jeżeli podczas wykonywania 
operacji  wejścia-wyjścia  nie  wystąpił    żaden  błąd  to  wartością  funkcji  jest  0,  w  przeciwnym  wypadku  kod 
błędu.     

• 

Sprawdź działanie tej funkcji  w programie. 

 
Ćwiczenie 4 

Napisz procedurę, która wyświetla na ekranie zawartość dowolnego pliku tekstowego wierszami w następujący 
sposób: 

− 

Przed każdym wierszem wyświetli numer kolejny wiersz. 

− 

Przerywa wyświetlanie po 5 wierszach i kontynuuje po naciśnięciu dowolnego klawisza. 

− 

Na  końcu wyświetla napis „koniec pliku”.