Sei sulla pagina 1di 23

Fişiere text

Metoda proiectului
Obiective operaţíonale/rezultate
aşteptate

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
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.
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
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
Fişiere text
definiţ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;
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
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.
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');
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.
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ă.


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

var f,g:text; begin


aux:=x; s:=0;
k:integer; while aux<>0 do
x,aux:longint; begin
s:=s+aux mod 10;
s:byte;
aux:=aux div 10
begin end;
assign(f,’numar.txt’); reset(f); write(g,s,’ ‘);
k:=k+1
assign(g,’suma.txt’); rewrite(g); end
k:=0; end;
while not eof(f) do if k=0 then write(g,’nu exista’);
close(f); close(g);
begin end.
read(f,x);
if x mod 2=1 then
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.

Potrebbero piacerti anche