Download - Fisiere Text

Transcript
  • 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

  • fclose(fise);

    return 0; }

    3. Scriei un program pentru concatenarea mai multor fiiere text ntr-

    un 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


Top Related