Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Prelucrarea fisierelor in limbajul C++

c


Prelucrarea fisierelor in limbajul C++

Fisiere text



Fisiere binare

Limbajul C++ defineste clasele istream si ostream pentru operatii de intrare si iesire cu fisierele standard, tastatura si ecranul. Obiectul cin este o instanta a clasei istream, iar cout o instanta a clasei ostream. Pentru lucrul cu fisiere de date limbajul C++ defineste urmatoarele clase

  • ofstream pentru operatii de scriere de fisiere
  • ifstream pentru operatii de citire din fisiere
  • fstream pentru operatii de citire si scriere a fisierelor

Aceste clase mostenesc din clasele istream si ostream. Definitiile acestor clase se gasesc in biblioteca <fstream>. O serie de constante utilizate de aceste clase sunt definite in clasa ios. Pentru prelucrarea unui fisier se creaza un obiect instanta a uneia din clasele de mai sus care este denumit stream.

Clasele definesc un constructor fara parametri.

Functiile membre importante ale claselor sunt

  • functia membra open() cu prototipul

open(char * filename, int mode);

asociaza obiectul cu fisierul. Parametrul filename este un sir de caractere cu numele fisierului. Al doilea parametru este optional si da modul de deschidere. El poate avea valorile

ios::in - deschidere in citire

ios::out - deschidere in scriere

ios::binary - fisier binary

Acesti parametri se pot combina folosind operatorul | . De exemplu, pentru un fisier binar deschis in scriere vom avea

ios::binary | ios:out

iar pentru deschiderea unui fisier binar in citire

ios::binary | ios::in

Acest al doilea parametru este optional pentru obiecte de tipul ifstream si ofstream care sunt automat deschise in citire si respectiv scriere.

  • clasele definesc si un constructor cu parametrii functiei open(). Acest constructor creaza un obiect si apoi deschide fisierul.
  • functia

void close();

inchide un fisier.

  • functia

bool eof();

are valoarea adevarat daca s-a detectat sfarsitul fisierului

  • functia

bool is_open();

are valoarea adevarat daca fisierul este deschis.

1. Fisiere text

Exista doua tipuri de operatii intrare/ iesire pentru fisiere tip text

  • functii pentru intrari / iesiri cu format
  • functii ce scriu / citesc caractere

Functii intrare / iesire cu format

Fisierele tip text se prelucreaza in acelasi mod ca fisierele standard de intrare si iesire, cin si cout. Operatorii de citire si scriere sunt >> si <<.

Functii intrare / iesire tip caracter

Clasele istream si ifstream au urmatoarele functii membre pentru citirea caracterelor. Functia

get(char&);

citeste un character.

Functia

getline(char * bloc, int size);

citeste cel mult size caractere in vectorul bloc.

Functia

getline(char * bloc, int size, char car);

citeste cel mult size caractere in vectorul bloc sau pana la intalnirea caracterului car.

Clasele ostream si ofstream au functia membra

put(char);

ce scrie un caracter.

Probleme rezolvate

Problema 1. Sa se scrie un program care sa calculeze valoarea unei expresii intr-un anumit numar de puncte. Rezultatele calculelor se vor scrie intr-un fisier text dupa care acest fisier va fi citit si afisat pe ecran. Programul de rezolvare a problemei este cel de mai jos.

# include <fstream>

# include <iostream>

# include <cmath>

using namespace std;

int main()

// calculeaza expresia

int i;

double x, e;

for(i = 0; i < 11; i++)

fil1.close();

// citeste fisierul creat si afisaza rezulatele

ifstream fil2;

fil2.open(filename);

if(!fil2.is_open())

cout << 'x' << 't' << 'e' << endl;

fil2 >> x >> e;

while(!fil2.eof())

fil2.close();

return 0;

Rezultatele rularii programului sunt cele de mai jos.

Problema 2. Sa se faca un program care sa copieze un fisier text. Programul va citi de la tastatura numele fisierului initial si al noului fisier. Copierea se va face citind cate un octet din primul fisier si scriindu-l in al doilea fisier. Se vor numara si afisa octetii cititi. Programul de rezolvare a problemei este cel de mai jos.

# include <iostream>

# include <fstream>

using namespace std;

int main()

cout << endl << "Introduceti numele noului fisier" << endl;

cin >> filename;

ofstream filb(filename);

if(!filb.is_open())

char car;

int nl = 0;

fila.get(car);

while(!fila.eof())

fila.close();

filb.close();

cout << 'lungimea fisierului ' << nl << ' caractere' << endl;

return 0; }

Rezultatele rularii programului pentru un exemplu concret sunt cele de mai jos.

2. Fisiere binare

Scrierea si citirea datelor din fisierele binare se face cu functiile

write(char * block, int size);

read(char * block, int size);

Primul parametru este adresa unui vector de caractere de unde sunt scrise datele sau unde sunt citite datele. Al doilea parametru da numarul de caractere de citit sau de scris.

Fisierele au indicatori interni care dau adresa urmatorului octet de citit sau de scris. Voloarea acestor indicatori este data de functiile

tellg();

pentru indicatorul urmatorului octet de citit.

tellp();

pentru indicatorul urmatorului octet de scris.

Indicatorii de pozitie sunt modificati de functiile

seekg(int offset, int direction);

pentru indicatorul de citire si respectiv

seekp(int offset, int direction);

pentru indicatorul de scriere. Parametrul offset da valoarea cu care se modifica indicatorul. Parametrul direction are valorile

ios::beg - relativa la inceputul fisierului

ios::end - relativa la sfarsitul fisierului

ios::cur - relativa la pozitia curenta

Probleme rezolvate

Problema 1. Se va crea un fisier binar cu 10 blocuri cu siruri de 10 caractere. Se va citi apoi fisierul si se va afisa pe ecran. Programul de rezolvare a problemei este cel de mai jos.

# include <iostream>

# include <fstream>

using namespace std;

int main()

int i, j;

for(i = 0; i < 10; i++)

fila.close();

ifstream filb;

// citeste si afisaza fisierul

filb.open(filename, ios::binary / ios::in);

if(!filb.is_open())

filb.read(x, 11);

while(!filb.eof())

filb.close();

return 0;}

Rezultatele rularii programului sunt cele de mai jos.

Probleme propuse

Problema 1. Sa se faca un program care sa calculeze dimensiunea in octeti a unui fisier text. Lungimea se va calcula citind cate un octet din fisier.

Problema 2. Sa se faca un program care sa calculeze numarul de linii dintr-un fisier text. Numarul de linii se va calcula citind toate liniile fisierului.



Document Info


Accesari: 5960
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )