Prof.Martin Elena
Suport de curs pentru
Limbajul Pascal
Cuprins:
Generalitati.Definitie.Clasificare
Lucrul cu fisiere text
Continuturi:
Turbo Pascal priveste hard-ware-ul exterior cu care lucreaza - imprimanta, tastatura, ecran, etc- ca periferice. Desi majoritatea au caracteristici diferite, programele solicita cai standard de comunicare cu ele. Solutia o reprezinta fisierele.
Pentru a stabili comunicatii, un program deschide un fisier de la periferic. Dupa aceea , transmite date si, daca este cazul, receptioneaza informatii. Cand operatia este incheiata,programul inchide fisierul
Definitie; Un fisier Pascal este o variabila speciala care permite comunicatii cu orice periferic.
Exista trei tipuri de fisiere Pascal;
fisiere text
fisiere cu tip
fisiere fara tip
Numarul componentelor fisierului nu este determinat de definitia sa
FISIERE TEXT
Acest tip de fisier contine caractere structurate pe linii ,fiecare linie fiind terminata cu marker-ul de sfarsit de linie ( end-of-line), starea de sfarsit de linie putand fi determinata cu ajutorul functiei Eoln. Marker-ul de sfarsit de linie este caracterul CTRL+Z.
In fisierele de tip text pot fi stocate atat valori de tip caracter sau string, cat si valori intregi sau reale.
a. Declararea unui fisier text: var nume_fisier:text;
b. Accesul pentru fisierele text este secvential. Pentru a asocia variabila de tip fisier cu un fisier extern, se foloseste procedura ASSIGN(fisier,nume);nume este o succesiune de caractere care va identifica din punct de vedere fizic variabila fisier.
Obs. Asocierea ramane valabila pana la un nou apel al ASSIGN.
Apelul se termina cu eroare daca fisierul fizic este deschis in timpul apelului.
c. Deschiderea unui fisier text se realizeaza cu una din urmatoarele rutine:
REWRITE(fisier) creeaza si deschide un fisier in vederea scrierii.
Obs. Apelul se termina cu eroare daca nu este loc suficient pe disc pentru noul fisier.In momentul apelului se initializeaza indicatorul de fisier cu valoarea 0 si se permit apoi operatii de scriere.
Daca fisierul s-a deschis prin executia acestei proceduri, operatiile de citire sunt permise numai dupa ce s-au facut scrieri.
RESET(fisier) Deschide un fisier existent in vederea citirii.
Obs. Daca fisierul este deschis in momentul apelului, acesta se inchide si apoi se redeschide.
APPEND(fisier deschide un fisier existent in vederea adaugarii de noi date
CLOSE(fisier) inchide fisierul, interzicand operatiile ulterioare de citire/scriere pana la o noua deschidere.
Obs. Daca la scrierea componentelor in fisier se omite inchiderea acestuia la sfarsitul prelucrarii, exista riscul ca ultimele informatii din zona tampon asociata fisierului sa nu se mai salveze in fisier.
Prelucrarile admise asupra unui fisier sunt:
crearea scrierea componentelor in fisier
exploatarea citirea si prelucrarea componentelor
actualizarea adaugarea, modificarea, stergerea unor componente prin operatii de citire/scriere.
Orice prelucrare incepe cu deschiderea fisierului si se incheie cu inchiderea sa- REWRITE/RESET respectiv CLOSE
Indicatorul asociat fisierului text cuprinde numarul de ordine (incepand de la 0 ) al caracterului curent ( caracterul care urmeaza sa fie prelucrat) din zona tampon ( buffer) asociata fisierului . Dimensiunea acesteia este, in general, 128 BYTES, dar poate fi modificata prin procedura SETTEXTBUF(fisier,buffer), unde buffer reprezinta in general un tablou de caractere ( buffer:array[1..10240] of char;) .
In unit-ul SYSTEM sunt declarate variabilele standard INPUT si OUTPUT de tip text.Aceste variabile sunt asociate implicit dispozitivului consola.Aceasta asociere se poate schimba prin folosirea procedurii ASSIGN.
Actualizarea unui fisier text presupune de obicei crearea unui nou fisier.Este posibil sa se adauge sau sa se stearga componente situate la sfarsitul fisierului (TRUNCATE(fisier) scrie un marcaj de sfarsit de fisier , in locul indicat de indicatorul de fisier).
Procedurile si functiile utilizate mai des sunt:
READ(fisier,lista_variabile); preia din fisierul specificat (daca lipseste se considera INPUT) o lista de valori care se stocheaza in ordine, in variabilele din lista_variabile;
Variabilele pot fi de tip char, string,intreg sau subdomeniu de intregi, sau real.
READLN(fisier,lista_variabile) neglijeaza caracterele ramase neasociate din linia curenta a fisierului fizic asociat variabilei fisier; in rest are acelasi efect cu READ.
WRITE(fisier,lista_expresii); se scriu valorile expresiilor date in fisierul fizic asociat variabilei fisier; daca acesta lipseste, se considera implicit OUTPUT
WRITELN(fisier,lista_expresii) are acelasi efect ca si WRITE, cu deosebirea ca scrie un marcaj de sfarsit de linie in fisierul fizic asociat.
CLOSE(fisier) se scrie in fisierul fizic marcajul de sfarsit de fisier.
EOF(fisier);bolean; functia returneaza TRUE daca s-a intalnit marcajul de sfarsit de fisier sau daca fisierul este vid;altfel, returneaza FALSE.
SEEKEOLN(fisier):boolean; daca indicatorul de fisier este initializat cu numarul de ordine al unui caracter egal cu ' ' sau TAB, se creste valoarea indicatorului astfel incat el sa indice un caracter diferit de spatiu sau TAB; returneaza TRUE cand caracterul cu al carui numar de ordine este initializat indicatorul, reprezinta un marcaj de sfarsit de linie sau fisier, altfel returneaza FALSE( deci se face un salt peste caracterele blanc sau TAB, spre deosebire de EOLN)
SEEKEOF(fisier):boolean; returneaza TRUE cand caracterul indicat de indicatorul de fisier (sarind peste blanc,TAB sau sfarsit de linie) este sfarsit de fisier
ERASE(fisier realizeaza stergerea fisierului fizic asociat variabilei fisier(acesta trebuie sa fie inchis in momentul apelului)
RENAME(fisier,nume_nou); redenumeste fisierul fizic asociat variabilei fisier cu noul nume;acesta trebuie sa fie inchis si sa nu existe un altul avand numele nume_nou.
Exemplu: Urmatorul program permite crearea,scrierea,citirea si redenumirea unui fisier text. Aceste operatii sunt selectate dintr-un meniu utilizator din care se selecteaza SCRIERE sau CITIRE.Dupa aceea programul solicita introducerea numelui fisierului cu care se va opera.
Daca s-a selectat operatia de scriere, programuil verifica daca pe disc exista un fisier cu numele introdus de utilizator; in cazul in care functia EXISTAFISIER returneaza true, programul deschide fisierul in modul APPEND, pentru a adauga noi date la sfarsitul acestuia, altfel se creeaza si se deschide unul nou cu procedura REWRITE>
Daca s-a selectat operatia de citire, programul asigneaza variabilei F numele introdus,deschide fisierul pentru citire (RESET) si citeste continutul acestuia.
Fisierul cu care s-a lucrat este inchis cu ajutorul procedurii CLOSE; daca se doreste schimbarea numelui , se apeleaza RENAME.
Program operatii_fisier_text;
Uses CRT,DOS;
Var sir,numefis,numenou:string[80];
F:text; Ch;char;
Function existafisier(numefis:pathstr):boolean;
Var f:file;
Begin
ASSIGN(f,numefis);
RESET(f);CLOSE(f);
existafisier=IORESULT=0
end;
Procedure citire;
Var nrlin:word;
Begin
Write('introduceti numele fisierului:'); Readln(numefis); ASSIGN(f,numefis); RESET(f);nrlin:=0;
While not eof(f) do begin
Inc(nrlin);write(nrlin:4,' ');
While not eof(f) do begin
Read(f,sir);write(sir)
End;
Readln(f);writeln;
End;
End;
Procedure scriere:
Begin
Writeln('scriere in fisier text');writeln;
Write('numele fisierului=');readln(numefis); ASSIGN(f,numefis);
If existafisier(numefis) then APPEND(f) else REWRITE(f);writeln;
Writeln('puteti incepe scrierea);
WINDOW(1,8,80,25);
Repeat
Readln(sir);writeln(f,sir)
Until sir='&'
End;
Procedure meniu;
Begin
Clrscr; writeln('S)criere'); writeln('C)itire'); ch:=UPCASE(READKEY);
If ch='S' then scriere else if ch='C' then citire else meniu;
End;
BEGIN
REWRITE(OUTPUT);
While not EOF(fisier) do begin
While not EOLN(fisier) do begin
Read(fisier,c);
Write(c);
end
writeln; readln(fisier)
end;
CLOSE(fisier);
ADAUGARE la sfarsitul unui document existent
ASSIGN(fisier,'document');
APPEND(fisier);
While not EOF do begin readln(sir);
Writeln(fisier,sir); End;
CLOSE(fisier);
APLICATII cu fisiere text:
Sa se creeze un fisier text pe disc si sa se listeze la imprimanta;
Sa se adauge noi linii la sfarsitul fisierului text creat anterior;
Sa se stearga eventualele linii vide sau "albe"( formate numai din blancuri sau caractere TAB) din fisierul creat la 1.
Scrieti un program care citeste din fisierul INPUT.TXT un numar n si din fisierul NUMERE.TXT n numere intregi.Sa se ordoneze crescator cele n numere si sa se scrie elementele ordonate in fisierul OUTPUT.TXT.
|