fisiere text

5
Fisiere text. Argumente in linia de comanda Fișiere text Pentru a realiza operații cu fișiere text se folosesc funcții și structuri definite în stdio.h: FILE este o structură ce conține informațiile necesare controlării unui fișier. FILE * fopen ( const char * filename, const char * mode ) asociază fișierul cu o structură FILE și întoarce un pointer la această structură. Dacă fișierul nu există sau nu a putut fi deschis, se va întoarce NULL. mode reprezintă modul de access dorit: o "r" deschide fișierul pentru citire; fișierul trebuie să existe. o "w" creează un fișier gol pentru scriere; dacă există deja un fișier cu același nume, conținutul lui este șters și este tratat ca un fișier gol. o "a" adaugă datele la sfârșitul fișierului; fișierul este creat dacă nu există. o "r+" deschide un fișier atât pentru scriere, cât și pentru citire; fișierul trebuie să existe. o "w+" creează un fișier gol atât pentru scriere, cât și pentru citire; dacă există deja un fișier cu același nume, conținutul lui este șters și este tratat ca un fișier gol. o "a+" deschide un fișier pentru citire și adăugare la sfârșit; se poate citi de la orice poziție din fișier, însă scrierea se face doar la sfârșit; fișierul este creat dacă nu există int fclose ( FILE * file ) închide fișierul asociat cu structura file și îl dezasociază. Funcții de citire și afișare pentru fișiere: int fgetc ( FILE * f ) întoarce următorul caracter din fișier convertit la int sau EOF dacă s-a întâlnit sfârșitul de fișier sau o eroare. char *fgets ( char *buf, int nmax, FILE * f ) citește caractere din fișier până cănd se întâlnește '\n' (este și el adăugat la șir) sau până când s-au citit nmax - 1 caractere. int fputc ( int c, FILE * f ) scrie caracterul c în fișier; funcția întoarce caracterul scris, în caz de success sau EOF altfel. int fputs ( char *buf, FILE *f ) scrie șirul buf în fișier; î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, ... )

Upload: ghimici-gabriel

Post on 14-Nov-2015

213 views

Category:

Documents


1 download

DESCRIPTION

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