Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Metoda proiectului
Obiective operaţíonale/rezultate
aşteptate
Într-un program Pascal un fişier fizic se identifică printr-o variabilă de tip fişier. O
astfel de variabilă nu are voie să apară în atribuiri sau expresii.
În general, fișierul fizic (extern) este un fișier pe un disc magnetic sau optic, însă
variabila poate fi asociată oricărui alt tip de dispozitiv (tastatura, ecran, imprimantă
etc.) care manevrează date.
În cadrul unui program, o variabilă de tip fişier poate identifica succesiv mai multe
fişiere text. De aceea, prelucrarea fiecărui fişier trebuie precedat de apelul
procedurii standard ASSIGN, prin care unei variabile de tip fişier i se asociază
numele unui anumit fişier fizic. Ulterior, toate operaţiile în care se va specifica
variabila respectivă se vor efectua asupra fişierului fizic asociat ei.
Apelul procedurii se termină cu eroare dacă fişierul fizic asociat este deschis în
momentul apelului.
var f:text;
..........
assign(f,‘in.txt');
Proceduri de deschidere
Pentru a citi sau scrie într-un fişier, aceasta trebuie deschis. Imaginaţi-vă că
aţi primit o scrisoare de la un prieten şi vreţi s-o citiţi. Prima data trebuie s-o
deschideţi pentru a îi vedea conţinutul.
Dacă fişierul fizic asociat nu există el va fi creat prin apelul acestei proceduri
(deci, fişierele de ieşire sunt create automat la execuţia programului).
Dacă fişierul fizic asociat există însă, conţinutul său este ŞTERS.
Se poate realiza cu procedurile READ sau READLN cu apelul READ/READLN( f, v1,
v2, ..., vn); unde, f este numele unei variabile de tip fişier text (dacă lipseşte se consideră
fişierul INPUT), iar v1, v2, ..., vn sunt variabile care pot fi de tip caracter, şir de caractere,
numeric (întregi sau reale).
Amvele apeluri citesc una sau mai multe componente din fișierul asociat variabilei f (începând
cu componenta al cărei număr de ordine este păstrat în indicatorul de fişier) într-una sau mai
multe variabile v1, v2, ..., vn, iar valoarea indicatorului de fişier creşte cu 1 după citirea
fiecărei componente.
Prin apelul READLN( f, v1, v2, ..., vn); după citirea a n componente din fişier în variabilele
specificate, indicatorul de fişier trece la începutul liniei următoare.
Citirea datelor din fişier
Ambele apeluri scriu valorile expresiilor e1, e2, ..., en în componentele succesive ale fişierului
asociat variabilei f, iar valoarea indicatorului de fişier creşte cu 1 după scrierea fiecărei
componente. Scrierea se face începând cu poziția curentă a indicatorului de fișier. După
efectuarea scrierilor, indicatorul fișier va fi poziționat după ultimul caracter scris în fișier.
O instrucțiune de forma Write( f, e1, e2, ..., en); este echivalentă cu instrucțiunile: Write(f,
e1); Write(f, e2); ...; Write(f, en); deci dacă la apelul procedurii sunt specificate n expresii,
atunci sunt efectuate n scrieri. Indicatorul de fișier rămâne în linia curentă, astfel încât la
următorul apel al procedurii expresiile vor fi scrise pe aceeași linie a fișierului.
Trecerea la începutul liniei următoare a fişierului, pentru scriere, se realizează prin apelul
WRITELN (f), care practic scrie un marcaj de sfârşit de linie în fişier.
Prin apelul WRITELN( f, e1, e2, ..., en); după scrierea celor n expresii în fişier, indicatorul de
fişier trece la începutul liniei următoare.
Expresiile pot fi scrise în fişier cu format explicit, cum ar fi formatul pentru scrierea numerelor
reale:
e:n:z, unde n reprezintă numărul de caractere pe care se face afişarea, iar z reprezintă numărul
de zecimale.
Închiderea fişierului
Funcţii
Eoln(f) - cu ajutorul acestei funcții se poate testa sfârșitul de linie într-un fișier text; returnează
TRUE dacă indicatorul de fişier a ajuns la marcajul de sfârşit de linie sau de fişier.
SeekEoln(f) - este similară cu Eoln exceptând faptul că indicatorul de fişier sare peste
caracterele spaţiu şi tab şi apoi testează sfârșitul de linie.
Eof (f) - cu ajutorul acestei funcții se poate testa sfârșitul de fișier; returnează TRUE dacă
indicatorul de fişier a ajuns la marcajul de sfârşit de fişier sau fişierul este vid.
SeekEof(f) - este similară cu Eof exceptând faptul că indicatorul de fişier sare peste caracterele
spaţiu, tab şi sfârşit de linie şi apoi testează sfârșitul de fişier.
Funcții şi proceduri utilizate la
lucrul cu fișiere text
Proceduri
var f,g,h:text;
a:char;
begin
assign(f,'i1.txt');
reset(f);
assign(g,'i2.txt');
reset(g);
assign(h,'i3.txt');
rewrite(h);
while not eof(f) do
begin
read(f,a);
write(h,a);
end;
while not eof(g) do
begin
read(g,a);
write(h,a);
end;
close(f);close(g);close(t);
end.
Aplicaţii
Să se verifice dacă două fişiere text i1.txt şi i2.txt au conţinut identic.
var f,g:text;
a,b:char;
ok:boolean;
begin
assign(f,'i1.txt');
reset(f);
assign(g,‘i2.txt');
reset(g);
ok:=true;
while (not eof(f)) and (not eof(g)) and ok do
begin
read(f,a);
read(g,b);
if a<>b then ok:=false;
end;
ok:=ok and eof(f) and eof(g);
if ok then writeln('Fisiere identice!')
else writeln('Fisiere diferite!');
close(f);
close(g);
end.
Aplicaţii
Se dă fişierul numere.txt care conţine numere întregi de cel mult 9 cifre fiecare, scrise
pe mai multe rânduri (numerele de pe fiecare rând sunt separate printr câte un
spaţiu). Se cere să creaţi fişierul sume.txt care să conţină pentru fiecare număr impar
din fişierul iniţial suma cifrelor sale. În fişierul sume.txt numerele vor fi scrise pe un
singur rând cu câte un spaţiu între ele. Dacă fişierul numere.txt nu conţine numere
impare, atunci în fişierul sume.txt se va scrie mesajul “Nu exista”.
numere.txt sume.txt
1 23 1234 1 5 25 9
52369 174
117
Soluţie