secvențial
Algoritmi și tehnici de
programare
Fișiere organizate secvențial
Reprezentare date
text
binar (fișiere de date)
Articole cu structuri (lungimi) identice / diferite
structuri identice (descriere identică) – părți cu structură variabilă
Ordinea în fișier
ordinea în care au fost adăugate (de obicei)
fără informații de regăsire
Acces
secvențial
direct (poziție, nr. octeți)
Prelucrarea fișierelor binare secvențiale.
Operații generale
Actualizare
Adăugare (1 articol sau mai multe)
Modificare (articol unic / selecție / integrală)
Ștergere nu este definită (simulare)
Prelucrarea fișierelor binare secvențiale.
Creare+populare fișier
Start
Algoritmul
Deschidere Primul cîmp din structura
fișier nou articolului care se citește
(nu neapărat primul din
descriere)
CNP
Închidere Articol
fișier
CNP
Stop
void creare_pop(char nume[30]) cin >> x.an;
Prelucrarea fișierelor binare organizate secvențial
Consultare - căutarea unui articol
Start
Algoritmul Deschidere
fișier
CNP căutat
!feof(stdin) Da
Nu Prelucrare CNP
căutat
Închidere
fișier
CNP căutat
Stop
Prelucrarea fișierelor binare organizate secvențial
Consultare - căutarea unui articol
Prelucrare CNP căutat
Poziționare pe
Algoritmul început fișier f
Articol x
vb = 0
!feof(f) și vb==0 Da
Prelucrare
Nu articol
Nu vb==0 Da Articol x
Nu a fost
găsit CNP
Ieșire
Prelucrarea fișierelor binare organizate secvențial
Consultare - căutarea unui articol
CNP == CNP
Nu Da
căutat
m=0
m = m + nota[i]
i = 0,n-1
m = m/n
nume, m
vb = 1
Ieșire
Prelucrarea fișierelor binare organizate secvențial
Consultare cu selecție
Să se listeze în câte un fișier text ASCII numele studenților din grupele
ale căror numere se introduc de la tastatură. Sfârșitul introducerii
datelor este marcat standard.
Observație: problemă de consultare secvențială ,cu mai multe articole,
selecție după un câmp cu valori duplicate și cu posibilitate de repetare
Schema bloc a programului
Listare Stud.dat
Prelucrarea fișierelor binare organizate secvențial
Consultare, cu selecție
Deschide lista
Articol x
vb = 0
!feof(f) Da
Nu
Prelucrare
articol
Închide lista
Nu vb==0 Da
Articol x
mesaj succes mesaj eroare
Șterge lista
Ieșire
Prelucrarea fișierelor nume_fis[30],
void prelucreaza(char binare organizate secvențial
char *nume_fisO, int nrgr)
Consultare,
{ cu selecție
FILE *f;
STUDENT x;
freopen(nume_fisO, "w", stdout);
fAlgoritmul
= fopen(nume_fis, "rb");
fread(&x, sizeof(x), 1, f);
int gasit = 0; Prelucrare articol
while (!feof(f)){
if (x.grupa == nrgr){
if (!gasit){ Nu gr == nr.gr.c. Da
cout << "Grupa " << nrgr << endl;
gasit = 1; Lista nume, m
Cout - scrieri exclusiv in fisierul
}
nume_fisO
cout << x.nume << endl;
Condiția}de vb = 1
selecție
fread(&x, sizeof(x), 1, f);
}
fclose(f); Ieșire
fclose(stdout);
if (!gasit)
remove(nume_fisO);
}
Prelucrarea fișierelor binare organizate secvențial
cu cel modificat
dispare condiția de selecție
Actualizare:
adăugare vezi populare, diferă poziția inițială
modificare (articol unic / selecție / integrală)
necesită regăsirea articolului de modificat consultare
după regăsire: confirmare (dacă e cazul), modificare în memorie, rescriere
Temă
◦ Studiați capitolul 2, subcapitolul 2.5 din manual
◦ Studiați subcapitolele 1, 2, 3 din capitolul cu
probleme de prelucrare a fișierelor din culegerea de
probleme
Capitolul 4 în ediția 2012
Capitolul 2 în ediția 2015