Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

 
CATEGORII DOCUMENTE





AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Nivelul superior de prelucrare a fisierelor

c

+ Font mai mare | - Font mai mic







DOCUMENTE SIMILARE

Trimite pe Messenger
Clase virtuale
Caractere speciale si de punctuatie
Operatori logici
Explorari in grafuri
Baze de numeratie
ARBORI
Initializarea modului grafic
LISTE CIRCULARE. STIVE. COZI
Program Algoritmul 1 suma max
Bucle - While si For

Nivelul  superior  de  prelucrare  a  fisierelor

Dupa cum am amintit, la acest nivel fisierele se  prelucreaza cu ajutorul unor proceduri specializate.

1. Deschiderea  unui  fisier

Functia fopen se utilizeaza pentru deschiderea unui fisier. Ea returneaza un pointer spre tipul FILE (tipul fisier), tip definit in fisierul stdio.h. Tipul FILE este un tip  structurat si el depinde de sistemul de operare. In caz de eroare, functia fopen returneaza pointerul NULL. Prototipul functiei fopen este urmatorul:

FILE *fopen (const char *cale, const char *mod);

unde:

-         cale are aceeasi semnificatie ca si in cazul functiilor open si creat.

-         mod  este un pointer spre un sir de caractere care defineste modul de prelucrare al fisierului dupa deschidere. Acest sir de caractere se defineste in felul urmator:

- “r”                - deschidere in citire (read);

- “w”               - deschidere in scriere (write);

- “a”                - deschidere pentru adaugare;

- “r+”              - deschidere pentru modificare (citire sau scriere);

- “rb”              - citire binara;

- “wb”             - scriere binara;

- “r+b” - citire/scriere binara.

Observatii:

1o. Daca se deschide un fisier inexistent cu modul “w” sau “a”, atunci el este deschis in creare.

2o. Daca se deschide un fisier existent cu modul “w”, atunci continutul vechi al fisierului se pierde si se va crea unul nou cu acelasi nume.

3o. Mentionam ca, stdin, stdout, stderr, stdaux si stdprn sunt pointeri spre tipul FILE si permit ca functiile de nivel superior de prelucrare a fisierelor sa poata trata intrarea standard si iesirile standard pe terminal si imprimanta la fel ca si fisierele pe celelalte suporturi. Singura deosebire consta in aceea ca aceste fisiere nu se deschid si nici nu se inchid de catre programator. Ele sunt deschise automat la lansarea in executie a programului si se inchid la apelul functiei exit.

4o. Apelul functiei se realizeaza prin constructia:

FILE *pf;

pf = fopen (“FIS1.DAT”,”w”);

2.  Prelucrarea  pe  caractere  a  unui  fisier

            Fisierele pot fi scrise si citite caracter cu caracter, folosind doua functii simple:

-         putc pentru scriere;

-         getc pentru citire.

Functia putc are prototipul:

int putc (int c, FILE *pf);

unde:

-         c este codul ASCII al caracterului care se scrie in fisier;

-         pf este pointerul spre tipul FILE a carui valoare a fost returnata de functia fopen la deschiderea fisierului in care se scrie; pf poate fi si stdout, sdterr, stdaux, stdprn.

Functia putc returneaza valoarea lui c respectiv –1 in caz de eroare.

            Functia getc are prototipul:

int getc (FILE *pf);

unde:

-         pf este pointerul spre tipul FILE a carui valoare a fost returnata de functia fopen la deschiderea fisierului; in particular pf poate fi stdin.

Functia getc returneaza codul ASCII al caracterului citit sau EOF la sfarsit de fisier sau eroare.

3.  Inchiderea  unui  fisier

Inchiderea unui fisier se realizeaza cu ajutorul functiei fclose care are prototipul:

int fclose (FILE *pf);

unde:

-         pf  este  pointerul  spre  tipul  FILE  a  carui  valoare  a  fost  definita la deschiderea fisierului prin intermediul functiei fopen.

Functia fclose returneaza:

-         0 la inchiderea normala a fisierului;

-         1  in caz de eroare.

Exemple:

1)      Programul urmator copiaza intrarea standard la iesirea standard stdout, folosind functiile getc si putc.

#include <stdio.h>

void main (void)

2)      Programul urmator copiaza intrarea standard la imprimanta.

#include <stdio.h>

void main (void)

3)      Programul urmator scrie la iesirea stdout caracterele unui fisier a carui cale  este argumentul din linia de comanda. Daca nu exista un argument in linia de comanda, atunci se citeste de la intrarea standard.

#include <stdio.h>

void main (int argc, char *argv[ ] )

          while (( c = getc (pf)) != EOF)        putchar(c);

          exit (0);

 }

4. Operatiile  de  intrare-iesire  cu  format

Biblioteca standard a limbajului C contine functii care permit realizarea operatiilor de intrare/iesire cu format. Astfel se pot utiliza functiile fscanf si fprintf, prima pentru citire cu format dintr-un fisier, iar a doua pentru scriere cu format intr-un fisier.

Functia fscanf este asemanatoare cu functia scanf. Ea are un parametru in plus fata de scanf. Acest parametru este un pointer spre tipul FILE si el defineste fisierul din care se face citirea. Acest pointer este primul parametru al functiei fscanf. Functia poate fi apelata printr-o expresie de atribuire de forma:



nr = fscanf (pf, control, lista_de_parametrii );

unde :

-         pf este un pointer spre tipul FILE si valoarea lui a fost definita prin apelul functiei fopen; defineste fisierul din care se face citirea;

-         ceilalti parametri sunt identici cu cei utilizati la apelul functiei scanf.

Functia fscanf, ca si functia scanf, returneaza numarul campurilor citite din fisier. La intalnirea sfarsitului de fisier se returneaza valoarea EOF definita in fisierul stdio.h. Pentru pf = stdin, functia fscanf este identica cu scanf.

Functia fprintf , ca si functia printf, returneaza numarul caracterelor scrise in fisier sau –1 in caz de eroare. Pentru pf = stdout, functia fprintf este identica cu printf. De asemenea, se pot utiliza pointerii standard obisnuiti: stderr, stdaux, stdprn.

Exemplu:

Vom scrie un program cu ajutorul caruia se va crea un fisier cu numele 'FIS.DAT' si care contine inregistrari cu numele, prenumele si adresa unor persoane.

 

#include <stdio.h>

void main(void)

 do 

    while (i<=n);

 fclose(pf);

}

5.  Intrari-iesiri  de  siruri  de  caractere

            Biblioteca standard a limbajului C contine functiile fgets si fputs care permit citirea respectiv scrierea intr-un fisier ale carui inregistrari sunt siruri de caractere.

            Functia fgets are prototipul:

char *fgets (char *s,  int n,  FILE *pf);

unde:

-         s este pointerul spre zona in care se face citirea caracterelor;

-         n-1 este numarul maxim de caractere care se citesc;

-         pf  este pointerul spre tipul FILE care defineste fisierul din care se face citirea.

De obicei s este numele unui tablou de tip char de dimensiune cel putin n. Sirul se termina cu ‘0’ (caracterul NUL). La intalnirea caracterului ‘n’, citirea se opreste. In acest caz, in zona receptoare se transfera caracterul ‘n’ si apoi caracterul NUL (‘0’).

In mod normal, functia returneaza valoarea pointerului s. La intalnirea sfarsitului de fisier se returneaza valoarea NULL.

Functia fputs scrie intr-un fisier un sir de caractere care se termina prin ‘0’. Ea are prototipul:

int fputs (const char *s, FILE *pf);

unde:

-         s este pointerul spre zona care contine sirul de caractere care se scrie;

-         pf este pointerul spre zona care contine sirul de caractere care se scrie.

Functia fputs returneaza codul ASCII al ultimului caracter scris sau –1  in caz de eroare.

Aceste functii sunt realizate folosind functia getc pentru fgets si putc pentru fputs.

Pentru a citi de la intrarea standard stdin, se poate folosi functia gets, care nu mai are parametrii pf si n. Parametrul pf este implicit stdin. Functia gets citeste caracterele de la intrarea standard pana la intalnirea caracterului ‘n’ care nu mai este pastrat in zona spre care pointeaza s. Sirul de caractere citit se termina si in acest caz prin ‘0’.

In mod analog, pentru a scrie la iesirea standard stdout se poate folosi functia puts, care nu mai are parametrul pf, acesta fiind implicit stdout. In rest, functia puts este la fel ca si functia fputs.

6.  Pozitionarea  intr-un  fisier

            Cu ajutorul functiei fseek se poate deplasa capul de citire/scriere al discului in vederea prelucrarii inregistrarilor fisierului intr-o ordine oarecare, diferita de cea secventiala (acces aleator). Aceasta functie este asemanatoare cu functia lseek. Ea are prototipul urmator:

int fseek (FILE *pf, long deplasament, int origine);

unde:

-         pf este pointerul spre tipul FILE care defineste fisierul in care se face pozitionarea capului de citire/scriere;

-         deplasament si origine au aceeasi semnificatie ca si in cazul functiei lseek.

Functia fseek returneaza valoarea zero la pozitionare corecta si o valoare diferita de zero in caz de eroare.

Functia ftell indica pozitia capului de citire in fisier. Ea are prototipul:

long ftell (FILE *pf);

unde:

-         pf este pointerul spre tipul FILE care defineste fisierul in cauza.

Functia returneaza o valoare de tip long care defineste pozitia curenta a capului de citire/scriere, si anume reprezinta deplasamentul in octeti a pozitiei capului fata de inceputul fisierului.

7.  Prelucrarea  fisierelor  binare

            Fisierele organizate ca date binare (octetii nu sunt considerati ca fiind coduri de caractere) pot fi prelucrate la acest nivel folosind functiile fread si fwrite. In acest caz se considera ca inregistrarea este o colectie de date structurate numite articole. La o citire, se transfera intr-o zona speciala, numita zona tampon, un numar de articole care se presupune ca au o lungime fixa. In mod analog, la scriere se transfera din zona tampon un numar de articole de  lungime fixa. Cele doua functii au prototipurile de mai jos:

unsigned fread (void *ptr, unsigned dim, unsigned nrart, FILE *pf);

unde:

- ptr     este pointerul spre zona tampon ce contine articolele citite (inregistrarea citita);

- dim    este un intreg ce reprezinta lungimea unui articol;

- nrart   este un intreg ce reprezinta numarul articolelor care se transfera;

- pf       este un pointer spre tipul FILE care defineste fisierul din care se face citirea.

unsigned fwrite (const void *ptr, unsigned dim, unsigned nrart, FILE *pf);

Parametrii functiei fwrite au aceeasi semnificatie ca si parametrii functiei fread.

Ambele functii returneaza numarul articolelor transferate sau –1 in caz de eroare.

Exemplu:

Programul urmator citeste de la intrarea standard stdin datele ale caror formate sunt definite mai jos si le scrie in fisierul miscari.dat din directorul curent.

tip        denumire          um                    cod                  pret                  cantitate

1          TELVIZOR      buc                   0001                3000000          200

#include <stdio.h>

#define MAX 60

typedef struct ARTICOL;

                         

union buf;

int cit (ARTICOL *str)                              // citeste datele de la intrarea standard si le scrie in

                                                          // sfarsit while

str -> pret = x;

str -> cant = y;

return (nr);

}                                                           // sfarsit cit

void main (void) // creaza fisierul miscari.dat cu datele citite de la intrarea standard

for ( ; ; )

// se scrie zona tampon daca nu este vida

  if(i !=0 )

   if(i!=fwrite(buf.zt, sizeof(ARTICOL),  i, pf))

   

   if(n = = EOF)    break;

 }

     fclose(pf);

}

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 280
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Distribuie URL

Adauga cod HTML in site



Termeni si conditii de utilizare | Contact
© SCRIGROUP 2019. All rights reserved