Sunteți pe pagina 1din 5

Fisiere text.

Argumente in linia de comanda


Fiiere text
Pentru a realiza operaii cu fiiere text se folosesc funcii i structuri definite
n stdio.h:

FILE este o structur ce conine informaiile necesare controlrii unui fiier.


FILE * fopen ( const char * filename, const char *
mode ) asociaz fiierul cu o structur FILE i ntoarce un pointer la
aceast structur. Dac fiierul nu exist sau nu a putut fi deschis, se va
ntoarce NULL. mode reprezint modul de access dorit:
o "r" deschide fiierul pentru citire; fiierul trebuie s existe.
o "w" creeaz un fiier gol pentru scriere; dac exist deja un fiier cu
acelai nume, coninutul lui este ters i este tratat ca un fiier gol.
o "a" adaug datele la sfritul fiierului; fiierul este creat dac nu
exist.
o "r+" deschide un fiier att pentru scriere, ct i pentru citire;
fiierul trebuie s existe.
o "w+" creeaz un fiier gol att pentru scriere, ct i pentru citire;
dac exist deja un fiier cu acelai nume, coninutul lui este ters i
este tratat ca un fiier gol.
o "a+" deschide un fiier pentru citire i adugare la sfrit; se poate
citi de la orice poziie din fiier, ns scrierea se face doar la sfrit;
fiierul este creat dac nu exist
int fclose ( FILE * file ) nchide fiierul asociat cu
structura file i l dezasociaz.

Funcii de citire i afiare pentru fiiere:

int fgetc ( FILE * f ) ntoarce urmtorul caracter din fiier


convertit la int sau EOF dac s-a ntlnit sfritul de fiier sau o eroare.
char *fgets ( char *buf, int nmax, FILE * f ) citete
caractere din fiier pn cnd se ntlnete '\n' (este i el adugat la ir)
sau pn cnd s-au citit nmax - 1 caractere.
int fputc ( int c, FILE * f ) scrie caracterul c n fiier;
funcia ntoarce caracterul scris, n caz de success sau EOF altfel.
int fputs ( char *buf, FILE *f ) scrie irul buf n fiier; n
caz de eroare se ntoarce EOF, altfel se ntoarce o valoare non-negativ.
int fscanf ( FILE *f, const char * format, ... )
int fprintf ( FILE *f, const char * format, ... )

Argumente n linia de comand


Pentru a specifica argumente n linia de comand, antetul funciei main va trebui
s fie de forma:
int main (int argc, char **argv )
argc reprezint numrul de argumente, iar argv vectorul de pointeri la argumente (iruri
de caractere). Primul argument argv[ 0 ] este ntotdeauna numele executabilului.
Pentru a seta argumentele din VisualStudio faceti click dreapta pe proiect ->
Properties -> Configuration Properties -> Debugging -> Command Arguments.
Probleme.
1. Tiparirea argumentelor liniei de comanda.
int main( int argc, char** argv){
int i;
puts ("Argumente:");
for (i=0; i<argc; i++)
puts (argv[i]);
return 0;
}
2. Copierea continutului unui fisier in alt fisier.
int main(int argc, char** argv) {
FILE *fisi, *fise;
char c;
if ( !(fisi = fopen(argv[1],"r")) ||
!(fise=fopen(argv[2],"w"))) {
puts("Fisierele nu pot fi
deschise");
return 1;
} //eroare daca fiierele nu pot fi
deschise
while((c=fgetc(fisi))!=EOF) //copiere
caracter cu caracter
fputc(c,fise);
fclose(fisi);

fclose(fise);
return 0; }

3. Scriei un program pentru concatenarea mai multor fiiere text ntrun fiier destinaie. Programul va primi numele fiierelor ca
argumente n linia de comand, n urmtoarea ordine:
destinatie sursa1 sursa2 ... sursan
#define BUFMAX 1005
int main(int argc, char *argv[])
{
FILE *dest, *src;
int i;
char buffer[BUFMAX];
dest = fopen(argv[1], "w");
if (!dest) fprintf(stderr, "Eroare! Nu am
putut deschide fisierul destinatie!\n");
for (i = 2; i < argc; ++i) {
src = fopen(argv[i], "r");
if (!src) fprintf(stderr, "Eroare!
Nu am putut deschide fisierul sursa
(%d)!\n", i);
while (fgets(buffer, BUFMAX, src) !=
NULL)
fputs(buffer, dest);
fclose(src);
}
fclose(dest);
return 0;
}
4. Scriei un program pentru cutarea unui ir dat ntr-un fiier text i
afiarea liniilor care conin irul dat. Fiierul i irul cutat vor fi
trimise ca argumente n linia de comand, n aceast ordine.
Exemplu: cautam in fisierul input.txt cuvantul vacanta (cu
argumentele input.txt vacanta )

Fisierul input.txt va contine:


Mai e putin si vine vacanta!
Mie nu imi plac pointerii dar iubesc vacanta!
Abia atept sesiunea!
Haideti la un suc acum!
Cine stie sa se dea cu placa de snowboard?
Vacanta asta merg la Predeal si ma dau cu placa!
Ma asteapta o sesiune infernala!
Vine vacanta cu trenul din Franta!
La multi ani 2014!
Iesire:
Mai e putin si vine vacanta!
Mie nu imi plac pointerii dar iubesc vacanta!
Vine vacanta cu trenul din Franta!
5. Adugai programului de la punctul 4 posibilitatea de a primi ca
argumente i una sau mai multe dintre urmtoarele opiuni (ultimele
2 argumente vor fi ntotdeauna numele fiierului i irul cutat):

-i ignor diferent dintre litere mici i litere mari.


-n afieaz i numerele liniilor din fiier care conin irul cutat.
-c afieaz numrul de linii n care s-a gsit irul cutat.

Exemplu: cautam in fisierul input.txt cuvantul vacanta (cu


argumentele i n c input.txt vacanta )
Iesire:
[1] Mai e putin si vine vacanta!
[2] Mie nu imi plac pointerii dar iubesc vacanta!
[6] Vacanta asta merg la Predeal si ma dau cu placa!
[8] Vine vacanta cu trenul din Franta!
Numar total de linii: 4.
6. Se d un fiier text ce conine informaiile despre situaia la o
anumit materie a unei grupe de studeni. Pentru fiecare student
exist n fiier o linie de forma:
Nume Prenume nota_activitate nota_examen
S se defineasc o structur STUDENT care reine aceste
informaii.

S se scrie un program care afieaz:

nota final pentru fiecare student, calculai nota final (va exista
un cmp corespunztor n structur), dup
formula: (nota_activitate + 2 * nota_examen) / 3; nota se va afia
cu 2 zecimale.
numrul de studeni promovai (ambele note >= 5)
numele studenilor cu not final maxim.

Intrare:
6
Dinca Alexandru 8.4 9.5
Georgescu Andrada 9.4 10
Ghitulete Razvan 9.3 9.2
Scoica Adrian 10 9.5
Tabara Mihai 7.2 8.5
Tiriplica Diana 9.5 9.5
Iesire:
Nota finala Dinca Alexandru: 9.13
Nota finala Georgescu Andrada: 9.80
Nota finala Ghitulete Razvan: 9.23
Nota finala Scoica Adrian: 9.66
Nota finala Tabara Mihai: 8.06
Nota finala Tiriplica Diana: 9.50
5 studenti promovati.
100%(procent de promovabilitate)
0 studenti au obtinut nota finala maxima

S-ar putea să vă placă și