Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 32

Datoteke

Programski jezici
2017/18
Vrste datoteka

Postoje dvije vrste datoteka:


• tekstualne datoteke
• binarne datoteke
Tekstualne datoteke
Tekstualna datoteka se sastoji od niza
znakova koji je znakovima za prelazak u
novi red (‘\n’)podijeljen u redove.
Svi znakovi u ovakvom nizu mogu da se
prikažu na ekranu ili štampaju na
štampaču.
Brojevi se u tekstualni fajlovima čuvaju u
obliku teksta (kao niz cifara).
Binarne datoteke
Sastoje se od niza znakova ciji je sadržaj
slika predstavljanja podataka u memoriji
računara.
Nema konverzije u toku upisa u fajl već se
podaci prenose bajt po bajt.
Strukturu binarnog fajla definiše sam
programer pa ne postoje univerzalni
programi u sklopu operativnih sistema koji
bi mogli prikazivati sadržaj binarnog fajla.
Rad sa datotekama
Pri radu sa datotekama postoje sledeće
radnje:
• otvaranje datoteke
• pristup datoteci
• isptivanje stanja datoteke
• zatvaranje datoteke
Otvaranje datoteke
FILE *fopen(char *filename, const char *mod);

filename – predstavlja putanju i


ime datoteke koja se otvara, npr.
D:\fajl.txt

mod – režim u kome se datoteka


otvara;
Otvaranje datoteke
Parametar mod može imati sledeće
vrijednosti:
• “r“ – otvaranje datoteke za čitanje
(pozicioniranje na početak datoteke)
• “w“ – upis u novu datoteku (ako ne
postoji kreira se, ako postoji
prebriše se sadržaj)
• “a“ – dopisivanje na kraj stare (ako
postoji) ili upis u novu datoteku
Otvaranje datoteke
Za naizmjenično čitanje i upis u
datoteku potrebno je prethodnim
oznakama dodati znak +, nebitno o
kom osnovnom režimu se radi, pa se
dobija:

“r+“, “w+“, “a+“


Otvaranje datoteke
Prethodno navedeni načini otvaranja
datoteke odnosili su se na
tekstualne datoteke.
Razlika kod otvaranja binarnih
datoteka je što se vrijednosti
parametra mod dodaje još slovo b pa
se dobijaju sledeće vrijednosti:
“rb“,“wb“,“ab“,
“r+b“, “a+b“, “w+b“
Zatvaranje datoteke
Datoteka se zatvara funkcijom fclose čiji je prototip:

int fclose(FILE *dat);

dat – pokazivač koji je pridružen datoteci


koja se zatvara
Povratna vrijednost funkcije je 0 ako je
zatvaranje uspjelo ili simbolička
konstanta EOF ako zatvaranje nije uspjelo
Završetak izvrašavanja programa dovodi do
automatskog zatvaranja svih otvorenih
datoteka.
Rad sa tekstualnim datotekama
Funkcije za prenos znakova:

int fgetc(FILE *dat);


int getc(FILE *dat);

Ove funkcije čitaju i vraćaju po


jedan znak iz datoteke dat. Ukoliko
se dođe do kraja datoteke funkcije
vraćaju EOF.
Rad sa tekstualnim datotekama
Funkcije za prenos znakova:

int fputc(int znak, FILE *dat);


int putc(int znak, FILE *dat);

Ove funkcije upisuju znak u datoteku


dat.
Vrijednost funkcija je kod ispisanog
znaka, odnosno EOF ako je došlo do
greške pri upisu.
Rad sa tekstualnim datotekama
Čitanje reda iz tekstualne datoteke radi se
funkcijom:

char *fgets(char *tekst, int n, FILE *dat);

Ova funkcija čita jedan red teksta (do znaka ‘\n’)


ili najviše n-1 znakova iz datoteke dat i upisuje u
niz tekst.

Funkcija dodaje znak ‘\n’ iza pročitanih znakova.

Vrijednost funkcije je tekst (pokazivač) ili NULL u


slučaju greške ili nailaska na kraj datoteke.
Rad sa tekstualnim datotekama
Upis reda u tekstualnu datoteku radi se
funkcijom:

int *fputs(char *tekst, FILE *dat);

Ova funkcija upisuje niz znakova tekst u


tekstualnu datoteku dat.

Funkcija dodaje znak ‘\n’ iza upisanih


znakova.

Vrijednost funkcije je ne-negativan broj


ili EOF u slučaju greške pri upisu.
Rad sa tekstualnim datotekama
Upis podataka sa konverzijom radi se
funkcijom:
int fprintf(FILE *dat, const char *format, arg1, arg2, ...);

Ova funkcija je ista kao funkcija printf


samo što kao prvi parametar prima
pokazivač na datoteku u koju se upisuje
(dat).

Vrijednost funkcije je broj znakova u


rezulutujućem nizu znakova isto kao kod
funkcije printf.
Rad sa tekstualnim datotekama
Čitanje podataka sa konverzijom radi se
funkcijom:
int fscanf(FILE *dat, const char *format, arg1, arg2, ...);

Ova funkcija je ista kao funkcija scanf


samo što kao prvi parametar prima
pokazivač na datoteku u koju se upisuje
(dat).

Vrijednost funkcije je broj pročitanih


(konvertovanih) podataka, a ne broj
iskorištenih znakova.
Binarne datoteke
Za rad sa binarnim datotekama,postoje dvije
osnovne funkcije:

size_t fread(void *ptr_dest, size_t sizeB,


size_t n_memb, FILE *dat)

size_t fwrite(const void *ptr_dest,


size_t sizeB, size_t n_memb, FILE *dat)
Binarne datoteke
Funkcija za čitanje iz binarne datoteke:

size_t fread(void *ptr_dest, size_t sizeB,


size_t n_memb, FILE *dat)

*ptr_dest – pokazivač na memorijsku adresu smještanja pročitanog


podatka, sa minimalnom veličinom sizeB*n_memb

sizeB – veličina u bajtovima elementa (bilo koji tip podatka) koji se


čita

n_memb – broj takvih elemenata

*dat – pokazivač na datoteku

size_t - povratna vrijednost funkcije je broj pročitanih elemenata


Binarne datoteke
Funkcija za pisanje u binarnu datoteke:

size_t fwrite(const void *ptr_dest, size_t sizeB,


size_t n_memb, FILE *dat)

*ptr_dest – pokazivač na memorijsku adresu elementa koji se


upisuje u fajl

sizeB – veličina u bajtovima elementa (bilo koji tip podatka) koji se


upisuje

n_memb – broj takvih elemenata

*dat – pokazivač na datoteku

size_t - povratna vrijednost funkcije je broj upisanih elemenata


Binarne datoteke
Sljedeće funkcije nam omogućavaju direktan pristup, tj.
dohvatanje trenutne pozicije u datoteci i pozicioniranje u
datoteci:

int fseek(FILE *dat, long pomjeraj, int poz)

long ftell(FILE *fp)

void rewind(FILE *dat)


Binarne datoteke
int fseek(FILE *dat, long pomjeraj, int poz)

Ovom funkcijom se pozicionira na mjesto u datoteci dat


čija je udaljenost pomjeraj bajtova od označene poz
tačke.
Treći parametar poz ukazuje od kog mjesta se mjeri
pomjeraj.
Moguće tačke pozicije (poz) obilježavaju se sledećim
konstantama:
SEEK_SET – početak datoteke
SEEK_CUR – trenutna pozicija u datoteci
SEEK_END - kraj datoteke
Binarne datoteke

long ftell(FILE *fp)

Funkcija ftell uzima kao argument pokazivač na


otvorenu datoteku i vraća trenutni položaj unutar
datoteke, tj. broj bajtova (znakova) od početka
do trenutne pozicije u datoteci.W
Binarne datoteke

void rewind(FILE *dat)

Ovom funkcijom se pozicionira na početak


datoteke dat .
Datoteke

int feof(File *dat)

Ova funkcija ispituje indikator kraja datoteke za


datoteku dat. Ukoliko je trenutna pozicija na
kraju datoteke, povratna vrijednost funkcije je
različita od nule (!=0).
Ukoliko trenutna pozicija nije na kraju, povratna
vrijednost je jednaka nuli (NULL).
Primjer 1
Napisati program koji korisniku pruža
mogućnost da sa tastature unese svoje ime,
prezime i godinu rođenja, a potom ih
upisati u tekstualni fajl podaci.txt.
Primjer 2
Napisati funkciju koja kao parametre prima
dva pokazivača na fajlove i prepisuje
sadržaj prvog fajla u drugi fajl.

Na proizvoljnoj lokaciji na računaru


napraviti tekstualni fajl i upisati prozvoljan
sadržaj, a zatim ga kopirati korištenjem
prethodne funkcije.
Primjer 3
Napisati program koji omogucava korisniku da
sa tastature unese proizovljan broj studenata
(ime, prezime i broj indeksa), a zatim ih
upisati u tekstualni fajl tako da se u prvom
redu nalazi broj upisanih studenata, a potom
slijede podaci o studentima.
Nakon unosa studenata, napisati novi program
koji će upisane studente iz tekstualnog fajla
ispisati na ekran.
Primjer 4
Koristeći tekstualni fajl iz prethodnog
primjera, napisati program koji korisniku
omogućava unos još jednog studenta i
upisati ga u fajl na prvo mjesto (nakon broj
studenata).
Primjer 5
Napisati program koji omogućava korisniku unos
proizvoljnog broja studenata (ime i prezime, broj
indeksa, godina studiranja i smijer) koji se čuvaju u
binarnoj datoteci artikli.BIN. Broj unijetih
studenata uvijek pamtiti na početku datoteke.

Napisati funkciju koja sortira studente po godini


studiranja u opadajućem redoslijedu. U datoteci
takođe treba da bude sortiran poredak.
Nakon poziva funkcije, na ekran ispisati sadržaj
datoteke.
Primjer 6
Napisati program koji omogućava korisniku evidenciju
artikala (šifra artikla, ime proizvođača, cijena,
količina) u prodavnici koji se čuvaju u binarnoj datoteci
artikli.txt. Broj artikala pamtiti na kraju datoteke.

Napisati funkciju koja za prosleđeni broj artikla,


umanjuje njegovu količinu i zatim ažurira sadržaj
datoteke.

Napisati funkciju koja izbacuje sve artikle kod kojih je


količina jednaka nuli. Voditi računa o broju artikala.
POKAZATI KORIŠTENJE ZAGLAVLJA
Pitanja?

You might also like