Википедија:Вики гимназијалац/Rad sa datotekama

Из Википедије, слободне енциклопедије
Viki-gimnazijalac-logo-geo.svg
Овај чланак је део пројекта Вики гимназијалац у Трећој београдској гимназији у Београду.
Датум уноса: децембар 2012. и јануар 2013.
Википедијанци: Ова група ученика ће писати чланке у именски простор Википедије.
Слободно можете помоћи ученицима и саветовати их током израде.
Datoteke zadaci2.jpg
Datoteke zadaci1.jpg

Rad sa datotekama[уреди]

Datoteke[уреди]

Datoteke su sekvencijalne strukture čiji broj nije unapred poznat i koje se zapisuju na nekom od spoljašnjih memorijskih medijuma. Ovakvi strukturni tipovi opisuju se sa File i postali su standardni u programskim jezicima posle pojave ovog koncepta u jeziku Pascal. Nastale su s potrebom da rezultati obrada ulaznih veličina ne nestanu nepovratno prestankom izvršavanja programa, već da se na disku ili traci mogu čuvati datoteke sa podacima koje možemo obrađivati koliko god hoćemo puta, a da ih ne moramo učitavati sa tastature. Datoteke su jednorodne strukture podataka, slično poljima ali za razliku od polja, broj elemenata datoteke se ne definiše unapred i podrazumeva se da one fizički postoje van programa na nekom od spoljašnjih memorijskih medijuma (disku, traci, disketi itd.) Datoteka može biti izvor informacija: kada mi čitamo sadržaj datoteke ili prijemnik informacija kada upisujemo podatke u datoteku. Operacija upisa u datoteku označava prenos podataka iz radne memorije (unutrašnje memorije) u datoteku, a operacija čitanja prenos sadržaja iz datoteke u radnumemoriju. Ove operacije se nazivaju ulazno-izlazne operacije.

Datotečni tip podataka[уреди]

Datotečni tip (tip file) predstavlja uređen skup proizvoljnog broja komponenti istog tipa. Broj komponenti teoretski nije ograničen, ali direktno zavisi od osobina fizičkog nosioca informacija (disk,traka, ...). Tip komponenti datotečnog tipa može biti bilo koji tip - prost ili strukturirani, sa jednim izuzetkom: to ne sme biti datotečni tip, niti strukturirani tip sa komponentama datotečnog tipa. Sve operacije sa datotekama (čitanje ili upis) se realizuju posredstvom njihovih komponenti, tako da u operaciji ucestvuje komponenta na koju pokazuje datotečni pokazivač. Sve komponente datoteke se mogu smatrati numerisanim - prva komponenta datoteke je interno označena nulom. Dužine datoteka se ne definišu u opisima, ali svaka datoteka ima kraj koji se obeležava markerom kraja datoteke (<eof> - end of file) . Zbog toga se pri radu sa datotekama koristi funkcija eof (ImeDatotecnePromenljive), koja dobija vrednost true ako je dostignut kraj datoteke i vrednost false ako nije.

Bafer[уреди]

Otvaranjem datoteke za upis ili čitanje rezerviše se deo memorije koji se naziva ulazno-izlazni bafer. Pri upisu u datoteku, komponenta se ne prosleđuje odmah na disk, već se upisuje u bafer, i tek kada se bafer napuni sadržaj se šalje na disk. Slično pri čitanju, ne čita se onoliko komponenti koliko se iz programa traži, već se bafer napuni traženim komponentama, ali se puni i komponentama koje nisu tražene. To znači, ako program traži 4 komponente, a bafer može da primi 64, to će se učitati još 60 komponenti. Baferisanjem se obezbeđuje brža razmena informacija.

Povezivanje datotečne promenljive sa datotekom[уреди]

Pre nego što započnemo operacije sa datotekom potrebno je da u programu povežemo datotečnu promenljivu sa konkretnom fizičkom datotekom na disku. Nakon povezivanja sve operacije nadstvamom fizičkom datotekom se realizuju posredstvom datotecne promenljive. Povezivanje se realizuje procedurom assign sledećeg oblika:

assign(DatotecnaPromenljiva,ImeFajla)

ImeFajla je string konstanta ili promenljiva koja identifikuje datoteku na disku. Na primer: assign(f, 'ucenici.dat') Ovom procedurom je datotečna promenljiva f povezana sa datotekom ucenici.dat u aktivnom direktorijumu.

Kreirenje novih datoteka i rad s njima[уреди]

Da bi se kreirala nova datoteka mora se nakon povezivanja sa datotečnom promenljivom procedurom assign otvoriti za upis proicedurom: rewrite(ImeDatotečnePromenljive) Ovom procedurom se uvek proizvodi prazna datoteka. Ako je datotečna promenljiva povezana sa datotekom koja već postoji tada se sadržaj postojeće datoteke briše bez ikakvog upozorenja u programu. Nakon procedure rewrite nova datoteka je spremna da prihvati informacije, a datotečni pokazivač dobija vrednost 0. Posle svakog upisa u datoteku vrednost datotečnog pokazivača se uvećava za 1 (pomera na sledeću komponentu). U Pascal-u se za upis u datoteku koristi procedura: write(f,x), gde je f ime datotečne promenljive, a x promenljiva istog tipa kao komponente datoteke koja se formira.U proceduri write dozvoljeno je navesti listu promenljivih: write(f, x 1 ,x2,... ,xn). Kada se prekida rad sa datotekom ona se mora zatvoriti, bez obzira da li je ulazna ili izlazna, procedurom: close(ImeDatotečnePromenIjive) Postojeća datoteka se otvara za čitanje primenom standardne procedure reset: Reset(ImeDatotečnePromenljive) Čitanje datoteke realizuje i procedura: read(f,x) Procedure otvaranja se mogu primeniti više puta nad istom datotekom. Ako je datoteka bila već otvorena ona se automatski zatvara, a u slučaju procedure reset datotečni pokazivač se pozicionira na prvu komponentu. Ponovljeni poziv rewrite briše sadržaj tekuće datoteke i priprema je za upis počev od prve komponente. Između ponovljenih poziva procedura otvaranja nije neophodno pozvati operaciju close za zatvaranja datoteke.

Za rad sa datotekama mogu se koristiti sledeće procedure:

  • RESET (F) - Pozicioniramo se na početak datoteke F da bi je obrađivali od prvog sloga. Ako jedatoteka F prazna važi: EOF (F) =true i F ^ je nedefinisano, inače je EOF (F) = false i F^ dobija vrednost prvog sloga datoteke.
  • REWRITE (F) - Brišu se svi slogovi datoteke F. Pri tome EOF (F) dobija vrednost true i postojimogućnost ponovnog kreiranja datoteke sa istim imenom.
  • GET (F) - Prelaz na sledeći slog datoteke F . Baferska promenljiva F^ dobija vrednost sledećegsloga datoteke ako on postoji. Ako je kraj datoteke i nema više slogova (nema sledećeg sloga) važi: EOF (F) =true i F^ je nedefinisano. Dejstvo ove procedure je nedefinisano ako je pre njenog poziva bilo EOF (F) =true.
  • PUT (F) - Tekuća vrednost baferske promenljive F^ upisuje se u datoteku F, postaje aktivan sledeći element datoteke i važi: EOF (F) =true i F^ nedefinisano.Pre upotrebe ove procedure mora da se izvrši pozicioniranje na kraj datoteke, odnosno treba da važi EOF (F) =true.
  • RESET (INPUT , ‘PODACI ‘); - Datoteka kreirana na disku pod imenom‘PODACI’ povezuje sesa standardnom datotekom INPUT.
  • REWRITE (OUTPUT , ‘IZLAZ ’); - Kao izlazna datoteka na disku će biti kreirana datoteka sa imenom 'IZLAZ'.

Reference[уреди]

Predrag S. Stanimirović, "Osnove programiranja"