fisiere text

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

Upload: andreea-negrut

Post on 25-Jun-2015

905 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fisiere Text

FFişiere textişiere text

Metoda proiectuluiMetoda proiectului

Page 2: Fisiere Text

La sfarşitul unitaţii de învăţare elevii vor fi capabili să:

identifice situatiile cand este necesara utilizarea fisierelor text argumenteze avantajele utilizării fişierelor text în programe analizeze corect operaţiile ce trebuie efectuate asupra fişierului în fucţie de specificul

problemei recunoască citirea la nivel de numar sau de caracter deducă cand e necesară, la citirea datelor, testarea sfârşitului de linie şi/sau a sfărşitului

de fisier compare scrierea în fişier cu afişarea pe ecran combine algoritmii învăţaţi utilizând citirea din fişier formuleze probleme noi care implică utilizarea fişierelor text îşi autoevalueze nivelul de înţelegere

Obiective operaţíonale/rezultate aşteptate

Page 3: Fisiere Text

Noţiuni introductive

Introducerea şi exportul datelor într-un program scris în Borland Pascal se fac de regulă folosind fișierele.

Tipul fișier defineşte o structură de date care cuprinde un număr nefixat de componente de același tip.

Î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.

Fiecărui fişier i se asociază de către compilator o variabilă numită indicator de fişier, care memorează în fiecare moment al prelucrării fişierului numărul de ordine al componentei curente. Prima componentă din fişier are numărul de ordine 0.

Page 4: Fisiere Text

Clasificare fişiere

În limbajul Pascal se poate lucra cu trei tipuri de fişiere:

fişiere text – componentele sunt caractere structurate pe linii de lungimi variabile

fişiere cu tip – componentele sunt de acelaşi tip înregistrare (articol) şi sunt stocate pe disc

fişiere fara tip – componentele sunt blocuri de informaţii de lungime fixă, stocate pe disc

Page 5: Fisiere Text

Bibliografie

Arvunescu Dana, Dumitru Cristina, Gălăţan Constantin, Ghesu Florin, Junea Sanda, Nistor Eugen, Paşoi Mircea, Pintea Rodica, Pitic Elena, Preda Georgeta, Radu Ştefana, Roşu Ovidiu, Sichim Cristina, Stoiculescu Melania, Trifan George – “Ghid de pregătire bacalaureat informatică” – Ed. Sigma 2008

Dana Lica, Mircea Pasoi - “Fundamentele programarii-culegere de probleme de informatică pentru clasa IX-a”, Ed. L&S Soft, Bucureşti 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

Page 6: Fisiere Text

Fişiere textdefiniţie, declarare

Un fișier text este format din caractere ASCII structurate pe linii de lungimi variabile.

Lungimea liniilor este de maxim 128 de caractere (octeţi) şi fiecare linie se încheie cu un marcaj de sfârșit de linie format din caracterele (CR (ASCII #13) - Carriage Return şi LF (ASCII #10) - Line Feed).

Un fișier text este terminat cu un marcaj de sfârșit de fișier reprezentat de caracterul ^Z, adică CTRL/Z (ASCII #26).

Un fișier text se declară în secţiunea var prin tipul predefinit text, de exemplu:

var f: text;

Page 7: Fisiere Text

Variabile standard de tip text

Fișierele standard de sistem - Input şi Output - sunt fişiere text şi se deschid automat (implicit) în momentul în care începe execuția programului.

- Input este fișierul text standard de intrare, care permite numai operații de citire, conținând datele introduse de la tastatură.

- Output este fișierul text standard de ieşire al sistemului, care permite numai operații de scriere şi el este asociat fizic cu ecranul.

Ambele nume ale fișierelor standard de sistem - Input, Output - au proprietatea că sunt implicite; cu alte cuvinte dacă numele fișierului nu este menționat, atunci el este implicit Input sau Output

Page 8: Fisiere Text

Lucrul cu un fișier text presupune următoarele etape :

Declararea unei variabile de tip fișier text Asocierea variabilei declarate unui fișier fizic, lucru care se realizează

prin apelul procedurii ASSIGN Deschidere fişierului pentru operaţii de citire sau scriere, prin apelul

uneia dintre procedurile: RESET, REWRITE sau APPEND Citirea, respectiv scriere datelor din/în fişier Închiderea fişierului prin apelul procedurii CLOSE

Scopul fişierelor text este acela de a citi sau de a scrie date în ele.

Page 9: Fisiere Text

Procedura ASSIGN

Î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 are forma: ASSIGN(f,nume_fișier); unde f este numele unei variabile de tip fişier text.

Apelul procedurii se termină cu eroare dacă fişierul fizic asociat este deschis în momentul apelului.

            var f:text;             ..........            assign(f,‘in.txt');

Page 10: Fisiere Text

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.

Un fişier text poate fi deschis prin unul dintre următoarele apeluri de proceduri:

a) RESET(f) – deschide fişierul permiţând numai operaţii de citire

Apelul se termină cu eroare dacă fişierul fizic asociat nu există.Dacă fişierul este deschis în momentul apelului acesta se închide şi apoi se redeschide pentru citire.

Page 11: Fisiere Text

Proceduri de deschidere

b) REWRITE(f) – deschide fişierul permiţând numai operaţii de scriere;

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.

c) APPEND(f) – deschide fişierul la sfârşit, permiţând numai operaţii de scriere la sfârşitul acestuia; prima operaţie de scriere se va face peste marcajul de sfârşit de fişier; în acest fel se pot adăuga noi linii la sfârşitul fişierului

Apelul se termină cu eroare dacă fişierul fizic asociat nu există.

Page 12: Fisiere Text

Citirea datelor din fişier

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.

O instrucțiune de forma Read( f, v1, v2, ..., vn); este echivalentă cu instrucțiunile: 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 fișier rămâne în linia curentă, astfel încât la următorul apel al procedurii datele vor fi citite de pe aceeași linie a fișierului.

Trecerea la începutul liniei următoare a fişierului se realizează prin apelul READLN(f).

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.

Page 13: Fisiere Text

Citirea datelor din fişier

La citirea datelor de tip caracter se citeşte caracterul al cărui număr de ordine este păstrat în indicatorul de fişier, chiar dacă acesta este un caracter cu rol separator (spaţiu, TAB, sfărşit de linie, Backspace, Bell).

La citirea cu READ a datelor de tip numeric (întreg sau real) indicatorul de fişier sare peste caracterele cu rol separator (spaţiu, TAB, sfărşit de linie, Backspace, Bell).

Page 14: Fisiere Text

Scrierea datelor în fişier

Se poate realiza cu procedurile WRITE sau WRITELN cu apelul:WRITE/WRITELN( f, e1, e2, ..., en); unde, f este numele unei variabile de tip fişier text (dacă lipseşte se consideră fişierul 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 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.

Page 15: Fisiere Text

Închiderea fişierului

Se face prin apelul procedurii CLOSE, de forma CLOSE(f).

La închiderea fișierului se salvează în fişier informaţia dorită, care din acest moment nu mai poate fi accesată până la o nouă redeschidere.

Dacă un fişier deschis pentru scriere nu este închis la sfârşitul prelucrării apare riscul pierderii datelor.

Page 16: Fisiere Text

De reţinut

Indiferent cum este deshis fişierul, sunt permise fie numai operaţii de citire, fie numai operaţii de scriere. De aceea actualizarea unui fişier text presupune de obicei creare unui nou fişier intermediar.

Accesul la componentele unui fişier text este secvenţial, adică pentru a accesa o anumită componentă trebuie parcurse toate componentele care o preced în fişier.

Page 17: Fisiere Text

Funcții şi proceduri utilizate la lucrul cu fișiere text

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.

Page 18: Fisiere Text

Funcții şi proceduri utilizate la lucrul cu fișiere text

Proceduri

Rename(f,nume_nou) – redenumeşte fişierul fizic asociat variabilei f cu numele nou specificat. Un fişier poate fi redenumit doar daca este închis şi nu există un alt fişier cu numele nou.

Erase(f) – şterge fişierul fizic asociat variabilei f. În momentul apelului fişierul trebuie să fie închis.

Truncate(f) – şterge toate componentele începând cu cea al cărei număr este păstrat de indicatorul de fişier şi până la ultima componentă a fişierului (practic scrie un marcaj de sfârşit de fişier în locul indicat de indicatorul de fişier).

Page 19: Fisiere Text

Aplicaţii

Scrieţi un program care creează un fişier text i3.txt prin concatenarea conţinuturilor a două fişiere text i1.txt şi i2.txt.

var f,g,h:text;var f,g,h:text; a:char;a:char;beginbeginassign(f,'i1.txt');assign(f,'i1.txt');reset(f);reset(f);assign(g,'i2.txt');assign(g,'i2.txt');reset(g);reset(g);assign(h,'i3.txt');assign(h,'i3.txt');rewrite(h);rewrite(h);while not eof(f) dowhile not eof(f) do beginbegin read(f,a);read(f,a); write(h,a);write(h,a); end;end;while not eof(g) dowhile not eof(g) do beginbegin read(g,a);read(g,a); write(h,a);write(h,a); end;end;close(f);close(g);close(t);close(f);close(g);close(t);end.end.

Page 20: Fisiere Text

Aplicaţii

Să se verifice dacă două fişiere text i1.txt şi i2.txt au conţinut identic.

var f,g:text;var f,g:text; a,b:char;a,b:char; ok:boolean;ok:boolean;beginbeginassign(f,'i1.txt');assign(f,'i1.txt');reset(f);reset(f);assign(g,‘i2.txt');assign(g,‘i2.txt');reset(g);reset(g);ok:=true;ok:=true;while (not eof(f)) and (not eof(g)) and ok dowhile (not eof(f)) and (not eof(g)) and ok do beginbegin read(f,a);read(f,a); read(g,b);read(g,b); if a<>b then ok:=false;if a<>b then ok:=false; end;end;ok:=ok and eof(f) and eof(g);ok:=ok and eof(f) and eof(g);if ok then writeln('Fisiere identice!')if ok then writeln('Fisiere identice!') else writeln('Fisiere diferite!');else writeln('Fisiere diferite!');close(f);close(f);close(g);close(g);end.end.

Page 21: Fisiere Text

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 952369 174 117

Aplicaţii

Page 22: Fisiere Text

Soluţie

var 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 then

begin aux:=x; s:=0; while aux<>0 do begin s:=s+aux mod 10; aux:=aux div 10 end; write(g,s,’ ‘); k:=k+1 endend;if k=0 then write(g,’nu exista’);close(f); close(g);end.

Page 23: Fisiere Text

Sarcină de lucru

Considerăm un număr natural nenul n>99 cu cel mult 9 cifre. Din n se obţine un şir de valori prin eliminarea succesivă a ultimei cifre, apoi a ultimelor două cifre, apoi a ultimelor trei cifre etc., până se obţine un număr de două cifre, ca în exemplu. Să se realizeze un program Pascal care citeşte de la tastatură numărul n şi care, scrie în fişierul prime.out, separate prin câte un spaţiu, doar valorile prime din şirul obţinut din n conform descrierii de mai sus.

Exemplu: pentru n=193124 se obţine şirul de valori 19312,1931, 193, 19 deci fişierul prime.out va avea următorul conţinut: 1931 193 19.