/*
Datoteke txt i bin, upis i citanje niza integera:
Upis niza integer-a u txt datoteku,
Citanje niza integer-a iz txt datoteke.
Upis niza integer-a u bin datoteku,
Citanje niza integer-a iz bin datoteke.
*/
#include <stdio.h>
#include<stdlib.h> // zbog exit()
// prikazuje opis niza i niz[] od n clanova
void prikazi_niz(char tekst[],int niz[],int n)
{
int i;
printf("\n\n %s",tekst);
for(i=0;i<n;i++){
printf(" %d",niz[i]);
}
printf("\n");
}
// U txt datoteku ImeDatoteke upisuje niz[] od n integera
void upisi_niz_u_txt_datoteku(char ImeDatoteke[],int niz[],int n)
{
FILE *p_fajl;
int i;
p_fajl = fopen(ImeDatoteke, "w"); // otvaramo txt fajl za pisanje
if( p_fajl == NULL ) { // obrada eventualne greske pri otvaranju fajla
printf("\n Greska pri otvaranju ulaznog fajla ! \n");
exit(1); // napustamo program
}
// upisujemo jedan po jedan clan niza (integer) u txt datoteku
for(i=0;i<n;i++){
// printf("\n Upisujem u txt datoteku niz[%d] = %d",i,niz[i]);
fprintf(p_fajl,"%d ",niz[i]);
}
fclose(p_fajl); // zatvaramo txt fajl
}
// Iz txt datoteke ImeDatoteke ucitava niz[] od n integera
void ucitaj_niz_iz_txt_datoteke(char ImeDatoteke[],int niz[],int n)
{
FILE *p_fajl;
int i;
p_fajl = fopen(ImeDatoteke, "r"); // otvaramo txt fajl za citanje
if( p_fajl == NULL ) { // obrada eventualne greske pri otvaranju fajla
printf("\n Greska pri otvaranju ulaznog fajla ! \n");
exit(1);
}
// ucitavamo jedan po jedan clan niza (integer) iz txt datoteke u niz[]
for(i=0;i<n;i++){
fscanf(p_fajl,"%d ",&niz[i]); // mora biti isti format kao pri upisu
//printf("\n Ucitan iz txt datoteke niz[%d] = %d",i,niz[i]);
}
fclose(p_fajl); // zatvaramo txt fajl
}
// U bin datoteku ImeDatoteke upisuje niz[] od n integera
void upisi_niz_u_bin_datoteku(char ImeDatoteke[],int niz[],int n)
{
FILE *p_fajl;
int i=0; // = 0 je obavezno !!!
p_fajl = fopen(ImeDatoteke, "wb"); // otvaramo bin fajl za pisanje
if( p_fajl == NULL ) { // obrada eventualne greske pri otvaranju fajla
printf("\n Greska pri otvaranju ulaznog fajla ! \n");
exit(1);
}
/*
// upisujemo jedan po jedan clan niza (integer) u bin datoteku
for(i=0;i<n;i++){
//printf("\n Upisujem u bin datoteku niz[%d] = %d",i,niz[i]);
fwrite(&niz[i], sizeof(niz[i]), 1, p_fajl);
}
*/
// odjednom upisujemo ceo niz od n integera u bin datoteku
fwrite(&niz[i], sizeof(niz[i]), n, p_fajl);
fclose(p_fajl); // zatvaramo bin fajl
}
// Iz bin datoteke ImeDatoteke ucitava niz[] od n integera
void ucitaj_niz_iz_bin_datoteke(char ImeDatoteke[],int niz[],int n)
{
FILE *p_fajl;
int i=0; // mora zbog while petlje
p_fajl = fopen(ImeDatoteke, "rb"); // otvaramo bin fajl za citanje
if( p_fajl == NULL ) { // obrada eventualne greske pri otvaranju fajla
printf("\n Greska pri otvaranju ulaznog fajla ! \n");
exit(1);
}
/*
Funkciju feof() ne treba pozivati pre pokusaja citanja !!! VAZNO !!!
Sledeci kod moze dovesti do greske (ucitava 1 clan niza vise od n):
while (!feof(p_fajl))
fscanf(p_fajl,"%d",&br);
*/
/*
// TREBA OVAKO:
// Ucitavamo jedan po jedan clan niza (integer) iz bin datoteke
while(1) { // beskonacna petlja koja se prekida sa break
fread(&niz[i],sizeof(niz[i]),1,p_fajl); // pokusavamo da procitamo jedan broj
//printf("\n Procitano iz bin datoteke niz[%d] = %d",i,niz[i]);
if (feof(p_fajl)) // Ukoliko smo dosli do kraja datoteke, prekidamo
break; // beskonacnu while(1) petlju
i++; // idemo na sledeci clan niza
}
*/
/*
// ucitavamo jedan po jedan clan niza (integer) u bin datoteku
for(i=0;i<n;i++){ // sa for petljom dobro radi jer ucitava n integera
fread(&niz[i],sizeof(int),1,p_fajl);
//printf("\n Procitano iz bin datoteke niz[%d] = %d",i,niz[i]);
}
*/
// odjednom ucitavamo iz bin datoteke n integera u niz
fread(niz,sizeof(niz),n,p_fajl);
fclose(p_fajl); // zatvaramo bin fajl
}
int main(void)
{
int Niz1[100] = {1,2,3,4}; // Niz integer-a
int Niz2[100] = {5,6,7,8};
int n1 = 4; // broj clanova niza
int n2 = 4;
// Tekstualna datoteka:
// Niz integer-a upisujemo u txt datoteku
upisi_niz_u_txt_datoteku("Niz1.txt",Niz1,n1);
upisi_niz_u_txt_datoteku("Niz2.txt",Niz2,n2);
// Niz integer-a ucitavamo iz txt datoteke
ucitaj_niz_iz_txt_datoteke("Niz1.txt",Niz1,n1);
ucitaj_niz_iz_txt_datoteke("Niz2.txt",Niz2,n2);
// Prikazujemo niz
prikazi_niz("Niz1 iz txt datoteke je: ",Niz1,n1);
prikazi_niz("Niz2 iz txt datoteke je: ",Niz2,n2);
printf("\n\n\n");
// Binarna datoteka:
// Niz integer-a upisujemo u bin datoteku
upisi_niz_u_bin_datoteku("Niz1.bin",Niz1,n1);
upisi_niz_u_bin_datoteku("Niz2.bin",Niz2,n2);
// Niz integer-a ucitavamo iz bin datoteke
ucitaj_niz_iz_bin_datoteke("Niz1.bin",Niz1,n1);
ucitaj_niz_iz_bin_datoteke("Niz2.bin",Niz2,n2);
// Prikazujemo niz
prikazi_niz("Niz1 iz bin datoteke je: ",Niz1,n1);
prikazi_niz("Niz2 iz bin datoteke je: ",Niz2,n2);
/*
// brisanje datoteka
remove("Niz1.txt");
remove("Niz2.txt");
remove("Niz1.bin");
remove("Niz2.bin");
*/
printf("\n\n\n");
system("PAUSE");
return 0;
}