De cele mai multe ori este necesar ca programele sa lucreze cu mai multe
seturi de date, numite fisiere. Datele continute in aceste fisiere se
pot memora in foma binara pe un mediu magnetic. q7n2nz
Tipul fisier defineste o structura care cuprinde un numar nefixat
de componente de acelasi tip.
Notiunea de fisier se foloseste cu intelesul de set de date sub forma
de text sau forma binara, date citite sau scrise de catre
un program.
Exista mai multe structuri de fisiere. Cea mai simpla este structura
secventiala. Un fisier secvential e format dintr-o secventa de
componente de acelasi tip ce pot fi citite numai in ordinea in care ele
apar in cadrul fisierului. De exemplu, daca se doreste citirea celei
de-a zecea componente, trebuie citite mai intai primele 9. Daca
programul doreste sa revina la prima componenta el trebuie
sa reinceapa citirea de la inceputul fisierului. Tot succesiv
se face si scrierea unui fisier secvential.
Exista si structuri de fisiere ce permit programului accesul direct la
anumite componente ale fisierului. Astfel orice componenta se poate accesa
imediat, daca se precizeaza numarul ei de ordine in
fisier, fara a mai fi necesara parcurgerea elementelor
precedente (numarul de ordine al primei componente este 0).
Accesul direct e permis numai pentru fisierele stocate pe disc.
Fiecarui fisier i se asociaza de catre compilator o variabila
numita indicator de fisier care cuprinde in tot timpul prelucrarii
fisierului, numarul de ordine al componentei curente.
In Turba Pascal exista trei tipuri de fisiere:
1. fisiere cu tip -; componentele au acelasi tip si sunt stocate pe disc;
2. fisiere text -; componentele sunt caractere structurate pe linii de
lungimi variabile;
3. fisiere fara tip -; componentele sunt blocuri de informatii de lungime
fixa, stocate pe disc;
Intr-un program Pascal un fisier se identifica printr-o variabila
de tip fisier. Variabila de tip fisier nu are nevoie sa apara in atribuiri sau expresii.
O variabila de tip fisier poate identifica succesiv mai multe fisiere de acelasi
tip. De aceea, prelucrarea fiecarui fisier trebuie precedata de
apelul unei proceduri standard ASSIGN, prin care variabilei de tip fisier i
se asociaza numele unui anumit fisier fizic. Toate operatiile in
care se va specifica acea variabila se vor face asupra fisierului fizic
asociat ei prin procedura ASSIGN.
Apelul procedurii:
ASSIGN(fisier,nume); unde:
- fisier e identificatorul unei variabile de tip fisier;
- nume e o expresie de tip STRING, care reprezinta numele unui fisierfizic;
Observatii:
- asocierea ramane valabila pana la o noua
asociere, printr-un alt apel al procedurii ASSIGN;
- apelul se termina cu eroare daca fisierul fizic e deschis in
momentul apelului.
Prelucrarile admise asupra unui fisier sunt:
1. crearea fisierului (scrierea componentelor in fisier);
2. exploatarea fisierului (citirea si prelucrarea componentelor fisierului);
3. actualizarea fisierului (adaugarea, modificarea sau “stergerea”
unor componente ale fisierului, prin operatii de citire si scriere.
Accesul la componentele unui fisier e permis doar daca acesta este deschis
=> orice prelucrare
incepe cu deschiderea fisierului si se sfarseste cu inchiderea
sa.
Deschiderea se realizeaza prin executia procedurii RESET sau REWRITE
iar inchiderea prin executia procedurii CLOSE.
Apelul procedurii RESET: RESET(fisier) unde fisier e numele unei variabile de
tip fisier.
Executia procedurii realizeaza:
1. initializarea indicatorului de fisier cu valoarea 0;
2. initializarea variabilei FILEMODE din unit-ul SYSTEM, astfel incat
sa permita, in continuare executia de:
- operatii de citire -; pentru fisierele de tip text;
- operatii de citire /scriere -; pentru fisierele cu sau fara tip.
Observatii:
- apelul se termina cu eroare daca fisierul fizic asociat nu exista;
- daca fisierul e deschis in momentul apelului, acesta se inchide
si apoi se redeschide.
Apelul procedurii REWRITE: REWRITE(fisier) unde fisier e numele unei variabile
de tip fisier.
Executia procedurii consta in:
1. Initializarea indicatorului de fisier co 0;
2. Initializarea variabilei FILEMODE din unit-ul SYSTEM, astfel incat
sa permita, in continuare executia de:
- operatii de citire -; pentru fisierele de tip text;
- operatii de citire /scriere -; pentru fisierele cu sau fara tip.
Observatii:
- apelul se termina cu eroare, daca nu este loc suficient pe disc
pentru noul fisier;
- daca fisierul fizic asociat exista, continutul sau este
sters, iar prima operatie de scriere in fisier va genera componenta cu numarul de ordine 0;
- daca fisierul s-a deschis prin executia acestei proceduri, operatiile
de citire sunt permise numai dupa ce s-au facut scrieri.
Apelul procedurii CLOSE: CLOSE(fisier) unde fisier e numele unei variabile
de tip fisier.
Efectul procedurii este inchiderea fisierului, prin care operatiile de
citire/scriere a componentelor lui sunt interzise pana la o noua
deschidere.
Observatie:
Daca la scrierea componentelor in fisier se omite inchiderea
acestuia la sfarsitul prelucrarii, exista riscul ca ulterior
ultimele informatii din zona tampon asociata fisierului sa nu
se mai salveze in fisier.
FISIERE CU TIP
Un fisier cu tip cuprinde mai multe componente de acelasi tip, numit tip de
baza al fisierului.
Diafragma sintaxei:
Unde identificator de tip reprezinta tipul de baza al fisierului. Acest
tip nu poate fi unul din tipurile fisier; el este de obicei un tip articol.
De aceea, componentele unui fisier cu tip se mai numesc articole.
Componentele unui fisier cu tip pot fi accesate atat secvential cat
si direct.
Indicatorul de fisier indica in permanenta numarul de ordine
al componentei care urmeaza sa fie prelucrata. Accesul
la acest indicator se face prin intermediul functiei FILEPOS si al procedurii
SEEK. Dupa deschiderea fisierului indicatorul de fisier are valoarea
0.
EXEMPLU de fisier cu tip:
TYPE articol=RECORD Atipul de baza al fisieruluiS cl:STRING; nu:STRING;
END;
VAR fis:FILE OF articol; Avariabila de tip fisier cu tipS art:articol;
Operatii posibile:
A. Citirea unei componente sau a mai multor componente succesive -; se
realizeaza prin apelul procedurii
READ de forma:
READ(fisier,v1,v2,…,vn)
Unde:
- fisier e numele variabilei de tip fisier cu tip;
- v1,v2,…,vn sunt n variabile al caror tip e tipul de baza
al fisierului (n>=1)
Executia procedurii consta in:
1. se preiau n componente succesive din fisier, incepand cu componenta
al carei nr. de ordine e pastrat in indicatorul de fisier, si se memoreaza in variabilele v1,v2,…,vn;
2. valoarea indicatorului de fisier creste cu 1 dupa citirea fiecarei
componente.
Observatii:
- daca in momentul apelului sau in timpul executiei procedurii,
indicatorul de fisier contine un numar de ordine mai mare decat cel al ultimei componente din fisier, apelul
se termina cu eroare;
- componentele sunt preluate in zona tampon asociata fisierului,
de unde se transfera la adresele variabilelor corespunzatoare; utilizarea zonei tampon asigura
reducerea numarului de operatii de acces la fisier;
- aceste transferuri de date nu sunt insotite de conversii deoarece componentele
fisierului cu tip cuprind date in forma de reprezentare interna, astfel asiguranduse
o crestere a vitezei de prelucrare.
B. Scrierea componentelor:
WRITE(fisier,v1,v2,…,vn); parametrii la fel ca la READ
Executia procedurii:
1. se scrie continutul variabilelor v1,v2,…,vn in componentele succesive
ale fisierului;
2. se creste valoarea cu 1 a indicatorului de fisier dupa scrierea fiecarei
componente.
Observatii
- daca in momentul apelului sau in timpul executiei procedurii,
indicatorul de fisier contine un numar de ordine mai mare decat cel al ultimei componente, se vor scrie in
fisier componentele lipsa, continutul acestora, este, insa
necontrolat;
- nu e recomandabil ca fisierul sa cuprinda componente cu continut
necontrolat; pentru evitarea acestei situatii, la crearea fisierului, nu trebuie
modificata valoarea indicatorului de fisier, iar daca se adauga
componente la sfarsitul fisierului, se recomanda folosirea func.
FILESIZE pentru determinarea numarului exact de componente.
FUNCTII SYSTEM
1. EOF -;de tip BOOLEAN; returneaza TRUE, daca indicatorul
de fisier e pozitionat la sfarsitul fisierului si FALSE in caz contrar;
Apel: EOF(fisier);
2. FILEPOS -; de tip LONGINT; returneaza numarul de ordine
al componentei curente;
Apel: FILEPOS(fisier);
3. FILESIZE -; de tip LONGINT; returneaza nr de componente al fisierului
asociat variabilei fisier;
Apel: FILESIZE(fisier);
4. SEEK -; se pozitioneaza indicatorul de fisier pe valoarea n;
n expresie de tip longint;
Apel: SEEK(fisier,n);
5. ERASE -; sterge fisierul fizic asociat variabilei fisier.
Apel: ERASE(fisier);
6. RENAME -; redenumeste fisierul asociat variabilei fisier cu numele dat
prin sirul de caractere nume.
Apel: RENAME(fisier,nume);
7. TRUNCATE -; sterge toate componentele fisierului,incepand
cu componenta indicata de indicatorul de fisier, si pana la ultima
componenta din fisier.
Apel: TRUNCATE(fisier);