fisiere text

of 23/23
F F işiere text işiere text Metoda proiectului Metoda proiectului

Post on 25-Jun-2015

881 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Fiiere textMetoda proiectului

Obiective operaonale/rezultate ateptate

La sfaritul unitaii de nvare elevii vor fi capabili s:

identifice situatiile cand este necesara utilizarea fisierelor text argumenteze avantajele utilizrii fiierelor text n programe analizeze corect operaiile ce trebuie efectuate asupra fiierului n fucie de specificul problemei recunoasc citirea la nivel de numar sau de caracter deduc cand e necesar, la citirea datelor, testarea sfritului de linie i/sau a sfritului de fisier compare scrierea n fiier cu afiarea pe ecran combine algoritmii nvai utiliznd citirea din fiier formuleze probleme noi care implic utilizarea fiierelor text i autoevalueze nivelul de nelegere

Noiuni introductive

Introducerea i exportul datelor ntr-un program scris n Borland Pascal se fac de regul folosind fiierele. Tipul fiier definete o structur de date care cuprinde un numr nefixat de componente de acelai tip. ntr-un program Pascal un fiier fizic se identific printr-o variabil de tip fiier. O astfel de variabil nu are voie s apar n atribuiri sau expresii. n general, fiierul fizic (extern) este un fiier pe un disc magnetic sau optic, ns variabila poate fi asociat oricrui alt tip de dispozitiv (tastatura, ecran, imprimant etc.) care manevreaz date. Fiecrui fiier i se asociaz de ctre compilator o variabil numit indicator de fiier, care memoreaz n fiecare moment al prelucrrii fiierului numrul de ordine al componentei curente. Prima component din fiier are numrul de ordine 0.

Clasificare fiieren limbajul Pascal se poate lucra cu trei tipuri de fiiere: fiiere text componentele sunt caractere structurate pe

linii de lungimi variabile

fiiere cu tip componentele sunt de acelai tip

nregistrare (articol) i sunt stocate pe disc

fiiere fara tip componentele sunt blocuri de

informaii de lungime fix, stocate pe disc

Bibliografie

Arvunescu Dana, Dumitru Cristina, Glan Constantin, Ghesu Florin, Junea Sanda, Nistor Eugen, Paoi Mircea, Pintea Rodica, Pitic Elena, Preda Georgeta, Radu tefana, Rou Ovidiu, Sichim Cristina, Stoiculescu Melania, Trifan George Ghid de pregtire bacalaureat informatic Ed. Sigma 2008 Dana Lica, Mircea Pasoi - Fundamentele programarii-culegere de probleme de informatic pentru clasa IX-a, Ed. L&S Soft, Bucureti 2005 Geroge Daniel Mateescu , Pavel Florin Moraru Informatic pentru liceu i bacalaureat Ed. Donaris, Sibiu 2001 http://www.didactic.ro http://olimpiada.info http://www.et.upt.ro/admin http://contrasdiana.wordpress.com

Fiiere textdefiniie, declarare

Un fiier text este format din caractere ASCII structurate pe

linii de lungimi variabile.

Lungimea liniilor este de maxim 128 de caractere (octei) i

fiecare linie se ncheie cu un marcaj de sfrit de linie format din caracterele (CR (ASCII #13) - Carriage Return i LF (ASCII #10) - Line Feed). reprezentat de caracterul ^Z, adic CTRL/Z (ASCII #26). text, de exemplu: var f: text;

Un fiier text este terminat cu un marcaj de sfrit de fiier

Un fiier text se declar n seciunea var prin tipul predefinit

Variabile standard de tip text

Fiierele standard de sistem - Input i Output - sunt fiiere text i se deschid automat (implicit) n momentul n care ncepe execuia programului. - Input este fiierul text standard de intrare, care permite numai operaii de citire, coninnd datele introduse de la tastatur. - Output este fiierul text standard de ieire al sistemului, care permite numai operaii de scriere i el este asociat fizic cu ecranul. Ambele nume ale fiierelor standard de sistem - Input, Output - au proprietatea c sunt implicite; cu alte cuvinte dac numele fiierului nu este menionat, atunci el este implicit Input sau Output

Lucrul cu un fiier text presupune urmtoarele etape :

Declararea unei variabile de tip fiier text Asocierea variabilei declarate unui fiier fizic, lucru care se realizeaz prin apelul procedurii ASSIGN Deschidere fiierului pentru operaii de citire sau scriere, prin apelul uneia dintre procedurile: RESET, REWRITE sau APPEND Citirea, respectiv scriere datelor din/n fiier nchiderea fiierului prin apelul procedurii CLOSE Scopul fiierelor text este acela de a citi sau de a scrie date n

ele.

Procedura ASSIGN

n cadrul unui program, o variabil de tip fiier poate identifica succesiv mai multe fiiere text. De aceea, prelucrarea fiecrui fiier trebuie precedat de apelul procedurii standard ASSIGN, prin care unei variabile de tip fiier i se asociaz numele unui anumit fiier fizic. Ulterior, toate operaiile n care se va specifica variabila respectiv se vor efectua asupra fiierului fizic asociat ei. Apelul procedurii are forma: ASSIGN(f,nume_fiier); unde f este numele unei variabile de tip fiier text.Apelul procedurii se termin cu eroare dac fiierul fizic asociat este deschis n momentul apelului. var f:text; .......... assign(f,in.txt');

Proceduri de deschidere Pentru a citi sau scrie ntr-un fiier, aceasta trebuie deschis. Imaginai-v c

ai primit o scrisoare de la un prieten i vrei s-o citii. Prima data trebuie s-o deschidei pentru a i vedea coninutul. proceduri:

Un fiier text poate fi deschis prin unul dintre urmtoarele apeluri de

a) RESET(f) deschide fiierul permind numai operaii de citireApelul se termin cu eroare dac fiierul fizic asociat nu exist. Dac fiierul este deschis n momentul apelului acesta se nchide i apoi se redeschide pentru citire.

Proceduri de deschidere

b) REWRITE(f) deschide fiierul permind numai operaii de scriere;

Dac fiierul fizic asociat nu exist el va fi creat prin apelul acestei proceduri (deci, fiierele de ieire sunt create automat la execuia programului). Dac fiierul fizic asociat exist ns, coninutul su este TERS.

c) APPEND(f) deschide fiierul la sfrit, permind numai operaii de scriere la sfritul acestuia; prima operaie de scriere se va face peste marcajul de sfrit de fiier; n acest fel se pot aduga noi linii la sfritul fiieruluiApelul se termin cu eroare dac fiierul fizic asociat nu exist.

Citirea datelor din fiier

Se poate realiza cu procedurile READ sau READLN cu apelul READ/READLN( f, v1, v2, ..., vn); unde, f este numele unei variabile de tip fiier text (dac lipsete se consider fiierul 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 fiierul asociat variabilei f (ncepnd cu componenta al crei numr de ordine este pstrat n indicatorul de fiier) ntr-una sau mai multe variabile v1, v2, ..., vn, iar valoarea indicatorului de fiier crete cu 1 dup citirea fiecrei componente. O instruciune de forma Read( f,v1,v2,...,vn); este echivalent cu instruciunile: Read(f,v1); Read(f,v2); ...; Read(f,vn); deci dac la apelul procedurii sunt specificate n variabile, atunci sunt efectuate n citiri. Indicatorul de fiier rmne n linia curent, astfel nct la urmtorul apel al procedurii datele vor fi citite de pe aceeai linie a fiierului. Trecerea la nceputul liniei urmtoare a fiierului se realizeaz prin apelul READLN(f). Prin apelul READLN( f,v1,v2,...,vn); dup citirea a n componente din fiier n variabilele specificate, indicatorul de fiier trece la nceputul liniei urmtoare.

Citirea datelor din fiier La citirea datelor de tip caracter se citete caracterul al crui

numr de ordine este pstrat n indicatorul de fiier, chiar dac acesta este un caracter cu rol separator (spaiu, TAB, sfrit de linie, Backspace, Bell).

La citirea cu READ a datelor de tip numeric (ntreg sau

real) indicatorul de fiier sare peste caracterele cu rol separator (spaiu, TAB, sfrit de linie, Backspace, Bell).

Scrierea datelor n fiier

Se poate realiza cu procedurile WRITE sau WRITELN cu apelul: WRITE/WRITELN( f, e1, e2, ..., en); unde, f este numele unei variabile de tip fiier text (dac lipsete se consider fiierul OUTPUT), iar e1, e2, ..., en sunt expresii de tip caracter, ir de caractere, numeric(ntregi sau reale) sau boolean. Ambele apeluri scriu valorile expresiilor e1,e2,...,en n componentele succesive ale fiierului asociat variabilei f, iar valoarea indicatorului de fiier crete cu 1 dup scrierea fiecrei componente. Scrierea se face ncepnd cu poziia curent a indicatorului de fiier. Dup efectuarea scrierilor, indicatorul fiier va fi poziionat dup ultimul caracter scris n fiier. O instruciune de forma Write( f, e1, e2, ..., en); este echivalent cu instruciunile: 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 fiier rmne n linia curent, astfel nct la urmtorul apel al procedurii expresiile vor fi scrise pe aceeai linie a fiierului. Trecerea la nceputul liniei urmtoare a fiierului, pentru scriere, se realizeaz prin apelul WRITELN (f), care practic scrie un marcaj de sfrit de linie n fiier. Prin apelul WRITELN( f,e1,e2,...,en); dup scrierea celor n expresii n fiier, indicatorul de fiier trece la nceputul liniei urmtoare.Expresiile pot fi scrise n fiier cu format explicit, cum ar fi formatul pentru scrierea numerelor reale: e:n:z, unde n reprezint numrul de caractere pe care se face afiarea, iar z reprezint numrul de zecimale.

nchiderea fiierului

Se face prin apelul procedurii CLOSE, de forma CLOSE(f). La nchiderea fiierului se salveaz n fiier informaia dorit,

care din acest moment nu mai poate fi accesat pn la o nou redeschidere.Dac un fiier deschis pentru scriere nu este sfritul prelucrrii apare riscul pierderii datelor.

nchis la

De reinut Indiferent cum este deshis fiierul, sunt permise fie numai

operaii de citire, fie numai operaii de scriere. De aceea actualizarea unui fiier text presupune de obicei creare unui nou fiier intermediar.

Accesul la componentele unui fiier text este secvenial,

adic pentru a accesa o anumit component trebuie parcurse toate componentele care o preced n fiier.

Funcii i proceduri utilizate la lucrul cu fiiere textFuncii

Eoln(f) - cu ajutorul acestei funcii se poate testa sfritul de linie ntr-un fiier text; returneaz TRUE dac indicatorul de fiier a ajuns la marcajul de sfrit de linie sau de fiier. SeekEoln(f) - este similar cu Eoln exceptnd faptul c indicatorul de fiier sare peste caracterele spaiu i tab i apoi testeaz sfritul de linie. Eof (f) - cu ajutorul acestei funcii se poate testa sfritul de fiier; returneaz TRUE dac indicatorul de fiier a ajuns la marcajul de sfrit de fiier sau fiierul este vid. SeekEof(f) - este similar cu Eof exceptnd faptul c indicatorul de fiier sare peste caracterele spaiu, tab i sfrit de linie i apoi testeaz sfritul de fiier.

Funcii i proceduri utilizate la lucrul cu fiiere textProceduri

Rename(f,nume_nou) redenumete fiierul fizic asociat variabilei f cu numele nou specificat. Un fiier poate fi redenumit doar daca este nchis i nu exist un alt fiier cu numele nou. Erase(f) terge fiierul fizic asociat variabilei f. n momentul apelului fiierul trebuie s fie nchis. Truncate(f) terge toate componentele ncepnd cu cea al crei numr este pstrat de indicatorul de fiier i pn la ultima component a fiierului (practic scrie un marcaj de sfrit de fiier n locul indicat de indicatorul de fiier).

Aplicaii

Scriei un program care creeaz un fiier text i3.txt prin concatenarea coninuturilor a dou fiiere text i1.txti i2.txt.

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.

Aplicaii

S se verifice dac dou fiiere text i1.txti i2.txt au coninut 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 ab 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.

Aplicaii

Se d fiierul numere.txt care conine numere ntregi de cel mult 9 cifre fiecare, scrise pe mai multe rnduri (numerele de pe fiecare rnd sunt separate printr cte un spaiu). Se cere s creai fiierul sume.txt care s conin pentru fiecare numr impar din fiierul iniial suma cifrelor sale. n fiierul sume.txt numerele vor fi scrise pe un singur rnd cu cte un spaiu ntre ele. Dac fiierul numere.txt nu conine numere impare, atunci n fiierul sume.txt se va scrie mesajul Nu exista. sume.txt 1 5 25 9

numere.txt 1 23 1234 52369 174 117

Soluievar f,g:text; k:integer; x,aux:longint; s:byte; begin assign(f,numar.txt); reset(f); assign(g,suma.txt); rewrite(g); k:=0; while not eof(f) do begin read(f,x); if x mod 2=1 thenbegin aux:=x; s:=0; while aux0 do begin s:=s+aux mod 10; aux:=aux div 10 end; write(g,s, ); k:=k+1 end end; if k=0 then write(g,nu exista); close(f); close(g); end.

Sarcin de lucru

Considerm un numr natural nenul n>99 cu cel mult 9 cifre. Din n se obine un ir de valori prin eliminarea succesiv a ultimei cifre, apoi a ultimelor dou cifre, apoi a ultimelor trei cifre etc., pn se obine un numr de dou cifre, ca n exemplu. S se realizeze un program Pascal care citete de la tastatur numrul n i care, scrie n fiierul prime.out, separate prin cte un spaiu, doar valorile prime din irul obinut din n conform descrierii de mai sus. Exemplu: pentru n=193124 se obine irul de valori 19312,1931, 193, 19 deci fiierul prime.out va avea urmtorul coninut: 1931 193 19.