2. zadatak sa vežbi - 9.april
Zadatak: Napisati funkcije za:
1) funkcija za umetanje znaka na kraj tekstualnog fajla
2) funkcija za umetanje znaka na početak tekstualnog fajla
3) funkcija za umetanje znaka na poziciju k u tekstualni fajl
Rešenje 1: Funkcija za dodavanje slova na kraj fajla (rešenje u slici):

Objašnjenje: Prvo se vrši pozicioniranje na kraj fajla, a onda se pomoću funkcije fputc upisuje jedan karakter na to mesto. Nakon ove funkcije, na kraju fajla je dodano jedno slovo, a pozicionira se na sledeću lokaciju koja je onda kraj fajla.
Ako bismo koristili samo ovu funkciju, program bi mogao da izgleda ovako:

Rešenje 3: Funkcija za umetanje znaka na poziciju k u tekstualni fajl

(! ovo ne znači da će sve raditi kako treba !)
Objašnjenje koda gore: Ako se pozicioniramo na jedno mesto pre kraja fajla, u promenljivu c se sa fgetc naredbom postavi karakter sa tog mesta, nakon toga se pozicionira jedno mesto dalje i tu se iz promenljive c ubaci karakter - znači, za jedno mesto ka kraju.
Pošto se bilo sa čitanjem ili postavčjanjem karaktera u fajl, sa svakom od tih naredbi, po završetku naredbe pozicija u fajlu pomeri za jedno mesto dalje, potrebno je vratiti se tri mesta prema početku fajla.
Ovo se ponavlja sve dok se ne dođe do pozicije na koju želimo da upišemo zadati karakter.
Pošto je rad sa tekstualnim fajlovima zavisan od implementacije na računaru, ovo rešenje nije nužno i uvek tačno !
Zbog toga je najjednostavnije raditi na sledeći način:
Napraviti novi tekstualni fajl, pa u njega upisivati iz našeg fajla karaktere (koristiti režim za dodavanje na kraj fajla), sve dok se ne upiše karakter na poziciji k-1. Onda upisati karakter koji želimo dodati, a zatim nastaviti sa upisivanjem iz prvog fajla sve dok se ne dođe do kraja fajla (EOF).
Rešenje 2: Funkcija za umetanje znaka na početak tekstualnog fajla
Preporuka je raditi na sledeći način:
Napraviti novi fajl (režim w) i u njega upisati znak koji želimo.
Zatim u njega dodavati redom znakove iz prvog fajla (režim za dodavanje), sve dok se ne dođe do kraja fajla (EOF).
Ako baš želite da se rešenje nalazi u prvom fajlu, uvek možete da kopirate sadržaj dobijenog fajla u prvi fajl i to na sledeći način:
Funkcija koja kopira jednu datoteku u drugu može biti napisana na sledeći način:
void cpy(FILE *fpulaz, FILE *fpizlaz) {
int c;
while((c=getc(fpulaz))!=EOF)
putc(c,fpizlaz);
}
Dodatni linkovi:
C funkcije za čitanje i pisanje (škola koda)
Neki rešeni zadaci sa datotekama iz spoljašnjih izvora