Rad sa tekstualnim fajlovima u C-u - neki rešeni zadaci
FAJL SE
OTVARA FUNKCIJOM:
FILE
* fopen(char *ime, char *mod);
Ova funkcija
prihvata string sa putanjom do fajla (ime), kao i string
(mod) koji definise način rada sa fajlom. Mod može biti:
"r" - fajl se otvara za čitanje (mora da postoji)
"w" - fajl se otvara za pisanje (kreira se ako ne
postoji, a ako postoji, njegov sadržaj se briše)
"a" - fajl se otvara za dopisivanje (kreira se ako ne
postoji. Prilikom svakog pisanja sadržaj se dodaje na
kraj fajla).
Nakon završetka rada sa fajlom, treba ga zatvoriti sledećom funkcijom:
fclose(f);
gde je f FILE pokazivač.
ARGUMENTI KOMANDNE LINIJE
Definišemo
parametre funkcije main:
Int argc - ovaj parametar prilikom pokretanja
programa dobija
vrednost broja argumenata koje je korisnik prilikom poziva naveo. Pri tom se i ime programa
broji kao argument komandne linije. U primeru ispod argc će biti postavljeno
na 3.
Naziv_programa ulaz.txt izlaz.txt
char *argv -pokazivač
na char koji sadrži adresu prvog
u nizu pokazivača na karaktere. Svaki od tih pokazivača na karaktere sadrži adresu odgovarajućeg stringa koji sadrži argument komandne linije. Npr. u
gornjem primeru, argv[0] će nam pokazivati na string " Naziv_programa ", argv[1] će nam
pokazivati na string "ulaz.txt",
argv[2] će nam pokazivati na string "izlaz.txt". Dakle, niz
pokazivača na čiji prvi član pokazuje argv je
dužine upravo argc.
Zadatak 1 - Napisati program koji prikazuje tekst iz fajla NekiFajl.txt koji se nalazi u istom folderu.
#include <stdio.h>
void main(){
char str[70];
FILE *f;
if((f=fopen("NekiFajl.txt","r"))==NULL){
printf("\nNe moze da se otvori fajl");
exit(1);
}
while(fgets(str,70,f)!=NULL){
puts(str);
}
fclose(f);
}
Zadataka 2 – Napisati program
koji upisuje u fajl brojevi.txt sve parne brojeve manje od
100.
#include
<stdio.h>
#include
<conio.h>
void main(void){
FILE
*fajl;
int i;
if ((fajl =
fopen("brojevi.txt", "w"))==NULL) {
printf("Fajl
se ne moye pripremiti za upis podataka \n");
getch();
/*stavljamo getch da bi videli poruku pre izlaza iz programa */
exit(1);
}
//upisujemo parne brojeve manje od 100 u fajl
for
(i=1;i<=100;i++){
if (i%2==0){
fprintf( fajl, "%d\n", i);
}
}
//zatvaramo fajl
fclose(fajl);
}
Zadatak 3 – Napisati program
koji otvara tekstualnu datoteku i broji koliko puta se pojavio znak a, koliko puta
se pojavio znak b i koliko puta se pojavio znak c. Broj pojavljivanja slova a, slova
b i slova c zapisati u novu tekstualnu datoteku u obliku:
Slova a ima: ...
Slova b ima: ...
Slova c ima: ...
Imena datoteka
se zadaju kao parametri programa u komandnom promptu.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h> /* koristimo biblioteka
zbog funkcije getch() */
int main(int argc, char *argv[]){
FILE *file1, *file2; /* pokazivaci
na fajlove */
int
brojacA=0, brojacB=0, brojacC=0;
char ch; /*promenjivu ch koristimo za citanje jednog znaka iz fajla */
/* proverava da li je ispravan broj parametara
*/
if(argc !=3 ) {
printf("Morate
uneti prvi i drugi fajl");
getch();
/*stavljamo getch da bi videli poruku pre izlaza iz programa */
exit(1);
}
/* otvaramo prvi fajl (argv[1])
u modu za citanje */
if ((file1 = fopen(argv[1], "r"))==NULL) {
printf("Fajl
se ne moze otvoriti \n");
getch();
/*stavljamo getch da bi videli poruku pre izlaza iz programa */
exit(1);
}
/* otvaramo drugi fajl (argv[2])
u modu za pisanje */
if ((file2 = fopen(argv[2], "w"))==NULL) {
printf("Greska.
Fajl se ne moze otvoriti u modu za pisanje. \n");
getch();
exit(1);
}
while ((ch = getc(file1)) !=EOF) /* prolazimo kroz prvi fajl */
{
if ((ch==
'a') || (ch=='A'))
{
brojacA++;
}
if ((ch==
'b') || (ch=='B'))
{
brojacC++;
}
if ((ch== 'c')
|| (ch=='C'))
{
brojacC++;
}
}
fprintf (file2,"Slova a ima: %d\n",brojacA);
fprintf (file2,"Slova b ima: %d\n",brojacB);
fprintf (file2,"Slova c ima: %d\n",brojacC);
fclose(file1);
fclose (file2);
return 1;
}