Sunteți pe pagina 1din 26

Programare II

Programare Orientată Obiect


Curs 12
Curs anterior
• Stanard Template Library

▫ Containere asociative

▫ Algoritmi

▫ Clasa string
Curs curent
• Fisiere
Procesarea fișierelor
Fișier
 Folosite pentru persistarea datelor
 Stocarea permanentă a unor volume mari de date

 Stocate pe device-uri secundare de stocare


 discuri magnetice
 discuri optice
 casete
Procesarea fișierelor
 Tipuri de fișiere

 Binare
 stochează datele sub format binar, 0 sau 1
 cel mai mic mod de stocare suportat

 Text
 stocheză datele ca o secvență de caractere
 pot fi citite în editoare
Ierarhia datelor
 Bit - cea mai mică unitate
 valoare 0 sau 1

 Byte - 8 biți
 folosite pentru a stoca caractere
 char
 wchar_t - pentru caractere unicode

 Câmp - un grup de caractere care au un înțeles


 de exemplu numele unei persoane
Ierarhia datelor
 Înregistrări - un grup de câmpuri relaționate
 reprezentate de structuri sau clase
 Exemple
 un sistem de plăți, informații despre o persoană

 Fișiere
 compuse dintr-un grup de înregistrări relaționate
 exemplu
 un sistem de plați care conține o înregistrare pentru fiecare angajat
 pot fi stocate în multe feluri
 fișiere secvențiale
 exemple XML, JSON

 Baze de date
 compuse dintr-un grup de fișiere relaționate
 gestionate de programe de gestionare a sistemelor de baze de date (DataBaseManagementSystems)
Fișiere și streamuri
 Ce este un fișier?
 Este o colecție de date stocate

 Ce este un stream?
 Este o conecxiune de la o sursă de date la o destinație de date

 C++ vede fișierele ca o secvență de bytes


 se termină cu un marker de sfârșit de fișier (end-of-file)

 Comunicare dintre programe și fișiere se face prin intermediul streamurilor


 fișiere header
 iostream
 cin/cout
 fstream
Fișiere și streamuri
 Comunicare dintre programe și fișiere se face prin intermediul
streamurilor
 fișiere header
 iostream
 cin/cout

 fstream
 templaturi de clase
 basic_ifstream (input)
 basic_ofstream (output)
 basic_fstream (I/O)
 tipuri specializate pentru lucrul cu, caractere
 ifstream (char input)
 ofstream (char output)
 fstream (char I/O)
Fișiere și streamuri
Crearea unui fișier secvențial
 C++ nu impune nici o structură a fișierelor
 conceptul de ”înregistrare” trebuie implementat de programator

 Deschiderea fișierelor
 tipuri de fișiere
 ifstream (input only)
 ofstream (output only)
 fstream (I/O)

 constructorul are ca parametrii numele fișierului și mod în care se deschide


 v1
 ofstream outClientFile( "filename", fileOpenMode );
 v2
 ofstream outClientFile;
 outClientFile.open( "filename", fileOpenMode);
Crearea unui fișier secvențial
• Moduri de deschidere a fișierelor
Mod Descriere
ios::app Scrie toate ieșirile la sfârșitul fișierului
ios::ate Deschide un fișier pentru scriere și se mută cursorul de scriere la
sfârșitul fișierului. Datele pot fi scrise oriunde în fișier
ios::in Deschide un fișier pentru citire
ios::out Deschide un fișier pentru scriere
ios:trunc Șterge conținutul unui fișier dacă există (la fel se comportă și
ios::out)
ios::binary Deschide un fișier binar pentru citire sau sciere

Exemplu
ofstream outClientFile( "clients.dat", ios::out );
ofstream outClientFile( "clients.dat");
Crearea unui fișier secvențial
 Operații
 operatorul !
 !outClientFile
 returnează adevărat dacă fișierul nu a fost deschis cu succes
 operatorul void *
 convertește streamul la un obiect de tip pointer
 închidera unui fișier
 outClientFile.close()
 apelat automat de destructor
 Scrierea într-un fișier
 outClientFile << myVariable
 Exercitiu
 cititi urmoarele date de la tastatura si scrietile intr-un fisier
 datele sunt data sub forma unui record care contine numar cont, nume, suma
Crearea unui fișier
secvențial. Rezolvare
exercitiu
#include <iostream> cout << "Introdu un cont, nume si
#include <fstream> o suma" << endl
<<" Introdu sfarsitul de fisier
using namespace std; cand s-a terminat citirea ";
int cont;
int main() char nume[30];
double suma;
{
ofstream
while(cin >> cont >> nume >>
outClientFile("Client.dat", suma)
ios::out); {
outClientFile << cont << ' ' <<
if (!outClientFile){ nume << ' '<<suma<<endl;
cerr << "Fisierul nu a putut fi cout<<'?';
deschis" <<endl; }
} return 0;
}
Citireaunui fișier secvențial
 Operații
 operatorul !
 !inClientFile
 returnează adevărat dacă fișierul nu a fost deschis cu succes
 operatorul void *
 convertește streamul la un obiect de tip pointer
 închidera unui fișier
 inClientFile.close()
 apelat automat de destructor
 citirea dintr-un fișier
 inClientFile >> myVariable
 Exercitiu
 cititi datelin fișierul creat la exemplul anterior
Citireaunui fișier secvențial.
Exemplu
• #include <iostream> • int cont;
• #include <fstream> • char nume[30];
• #include <iomanip> • double suma;
• using namespace std;
• while(inClientFile >> cont
• int main() >> nume >>suma)
• { • {
• ifstream inClientFile("Client.dat", • cout << left << setw( 10 )
ios::in);
<< cont << setw(10) << nume
<< setw(10)<<
• if (!inClientFile)
setprecision( 4 ) << right
• {
<<suma<<endl;
• cerr << "Fisierul nu a putut fi
deschis" <<endl;
• }
• } • return 0;
• }
Citireaunui fișier secvențial.
Poziționarea în fișiere
Poziționarea pointerului de citire în fișier
 numărul de bytes care se citesc/scriu
 Funcții de repoziționare
 seekg (seek get pentru clasa istream)
 seekp (seek put pentru clasa ostream)
 Au doi parametrii offset și direcție
 offset - numărul de bytes
 direcția
 ios::beg - relativ la începutul streamului
 ios::cur - relativ la poziția curentă
 ios::end - relativ la sfârșitul streamului
Citireaunui fișier secvențial.
Poziționarea în fișiere
Recitirea unui fișier
 //citeste fisierul
 //resetare eofbit pentru urmatoarea citire
 inClientFile.clear();
 //mutare la începutul fișierului
 inClientFile.seekg( 0 );
 //recitire fișier de la început
Modificarea unui fișier secvențial
Noua înregistrare nu trebuie să fie mai lungă decât
vechea înregistrare
Nu ar trebui să suprascrie următoarea înregistrare
Ar trebui să rescriem fiecare înregistrare într-un nou fișier
 se copie toate înregistrările înaintea celei care se va modifica
 se scrie o nouă versiune a înregistrări
 se copie toate înregistrările după înregistrarea curentă
Poate fi acceptabilă dacă se modifică multe înregistrări
Exemplu
#include <iostream> //definire vector cu continut fisier
#include <string> vector <string> v(isi, eos);
#include <vector>
#include <fstream> //sortare vector de cuvinte
#include <algorithm> sort(v.begin(), v.end());
using namespace std;
int main(){ //deschide fisier pentru scriere
string from, to; ofstream os(to.c_str());
cout << "Fisierul de unde se citeste : "; cin >>
from; //definire iterator
cout << "Fisierul de unde se scrie : "; cin >> ostream_iterator <string> osi(os, "\n");
to;
//deschidere fisier //scriere in fisier fara duplicate
ifstream is(from.c_str()); unique_copy(v.begin(), v.end(), osi);
//definire iteratori fisier
istream_iterator <string > isi(is); return (!is.eof() && !os);
istream_iterator <string > eos; //end of }
stream
Fișiere cu acces aleatoriu
 Random Access Files
 programatorii ar trebui să creeze fișiere cu acces aleatoriu
 un mod simlu de a stoca înregistrări care pot fi adăugate/modificate/șterse ușor
 se calculează poziția în fișier în funcție de dimensiunea înregistrării
 se găsește poziția în fișier în funcție de cheia înregistrării
0 100 200 300 400 500

} byte offsets
}
}
}
}
}
}
100 100 100 100 100 100
bytes bytes bytes bytes bytes bytes
Fișiere cu acces aleatoriu vs.
fișiere text
”1234567” (char *) vs 1234567
 scrie raw bytes in fișier
 char * ocupă 8 bytes (unul pentru fiecare caracter)
 int se reprezintă pe un număr fix de bytes
 123 are aceeaași lungime ca 1234567
 operatirul << și funcția write()
 outfile << numar
 Afișează numerele (int) ca și caracter
 număr variabil de bytes
 outfile.write(const char *, int)
 ia pinteri din memorie și numărul de bytes care îl scrie
 copie direct în fișier din memorie
Fișiere cu acces aleatoriu vs.
fișiere text
Exemplu
• int i = 5567; • outFile.write( (char*)( &number ),
• int*p = &i; sizeof( number ) );
• file.seekp(8);  &number este un int*
• file.write( ( char* ) p ,  Convertit la char*
sizeof( int ) );  sizeof(number)
 Dimensiunea variabilei number
(un int) în bytes
 funcția de citire este similară
Scrierea de date într-un
fișier cu acces aleatoriu
Folosire seekp pentru a scrie la o locație exactă
 prima înregistrare începe la byteul 0
 a doua înregistrare începe la bytelul 0 + sizeof(obiect)
 orice înregistrare (NrInregistrare -1) * sizofObject

Exemplu
 inClientFile.seekp( (i-1) * sizeof( Client) );
 inClientFile.write((char*)( &client), sizeof(client));
Citirea dintr-un fișier cu
acces aleatoriu
Citirea este similară cu scrierea
Citește raw bytes din fișier în memmorie
inFile.read( (char*)( &number ), sizeof( int ) );
 &number: locația datelor care vor fi citite
 sizeof(int): câți bytes vor fi citiți
Nu folosiți inFile >> number cu raw bytes
 >> convertește numerele la text
 de ex 123 nu va ocupa aceelași numar de bytes cu 1234
Serializare
Procesul de scriere/citire automata a unui obiect
Supraîncarcarea operatoriilor <<, >>
Se pierde informatia despre tipul obiectului
 dacă programul știe tipul obiectului poate citi tipul corect
 dacă un fișier conține tipuri diferite de obiecte
 adaugarea unui cod pentru fiecare tip
 folosirea unui switch pentru citirea tipului corect

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

  • Ghid WordPress pentru dezvoltatori
    Ghid WordPress pentru dezvoltatori
    De la Everand
    Ghid WordPress pentru dezvoltatori
    Încă nu există evaluări
  • Lucrarea de Laborator nr4 - C++
    Lucrarea de Laborator nr4 - C++
    Document10 pagini
    Lucrarea de Laborator nr4 - C++
    CapitanMD
    Încă nu există evaluări
  • Fisiere - POO
    Fisiere - POO
    Document9 pagini
    Fisiere - POO
    Albu Daniela Gabriela
    Încă nu există evaluări
  • CursJava 04 CristianIonita IO
    CursJava 04 CristianIonita IO
    Document12 pagini
    CursJava 04 CristianIonita IO
    Aysel-Ioana BATCOVEANU
    Încă nu există evaluări
  • Fisiere Binare
    Fisiere Binare
    Document9 pagini
    Fisiere Binare
    Robert Ursu
    Încă nu există evaluări
  • Teorie - 01 - Fisiere Partea 1
    Teorie - 01 - Fisiere Partea 1
    Document3 pagini
    Teorie - 01 - Fisiere Partea 1
    Anonymous CZYe2H
    Încă nu există evaluări
  • Fișierele În C++
    Fișierele În C++
    Document3 pagini
    Fișierele În C++
    Chiriac Olga
    Încă nu există evaluări
  • Fisieretext
    Fisieretext
    Document29 pagini
    Fisieretext
    DeekyDZ
    Încă nu există evaluări
  • Operatii de Intrare-Iesire INFO
    Operatii de Intrare-Iesire INFO
    Document3 pagini
    Operatii de Intrare-Iesire INFO
    Teo Lazarovici
    Încă nu există evaluări
  • Curs 13 POO
    Curs 13 POO
    Document9 pagini
    Curs 13 POO
    R0ckstar
    Încă nu există evaluări
  • Fluxuri
    Fluxuri
    Document3 pagini
    Fluxuri
    andreeaciocan
    Încă nu există evaluări
  • Lab 11
    Lab 11
    Document3 pagini
    Lab 11
    Ionut Valentin
    Încă nu există evaluări
  • Lab13 s1 An1 23 24
    Lab13 s1 An1 23 24
    Document29 pagini
    Lab13 s1 An1 23 24
    Alex Feisan
    Încă nu există evaluări
  • POO Limbajul Java Teorie Si Aplicatii
    POO Limbajul Java Teorie Si Aplicatii
    Document120 pagini
    POO Limbajul Java Teorie Si Aplicatii
    Daniel Rotari
    0% (1)
  • Fişiere Text
    Fişiere Text
    Document4 pagini
    Fişiere Text
    Zach Yeet
    Încă nu există evaluări
  • BPC 5 Fișiere
    BPC 5 Fișiere
    Document42 pagini
    BPC 5 Fișiere
    Vitalie Ambrosi
    Încă nu există evaluări
  • Fisiere Text in C++
    Fisiere Text in C++
    Document1 pagină
    Fisiere Text in C++
    Raducu Serenela
    Încă nu există evaluări
  • Laborator 12,13 PDF
    Laborator 12,13 PDF
    Document9 pagini
    Laborator 12,13 PDF
    Denis Minjineanu
    Încă nu există evaluări
  • Indrumarpclp 2
    Indrumarpclp 2
    Document71 pagini
    Indrumarpclp 2
    cosmyn992
    Încă nu există evaluări
  • Lab11 POO Calc
    Lab11 POO Calc
    Document14 pagini
    Lab11 POO Calc
    akonbeast
    Încă nu există evaluări
  • Lab 5 Cazacu POO
    Lab 5 Cazacu POO
    Document4 pagini
    Lab 5 Cazacu POO
    Iura Cazacu
    Încă nu există evaluări
  • Serializarea
    Serializarea
    Document6 pagini
    Serializarea
    Gabi Sorin Sima
    Încă nu există evaluări
  • Fisier Text
    Fisier Text
    Document7 pagini
    Fisier Text
    Ilinca Simescu
    Încă nu există evaluări
  • Programare Modulara C# Curs5 Fisiere
    Programare Modulara C# Curs5 Fisiere
    Document6 pagini
    Programare Modulara C# Curs5 Fisiere
    AF
    Încă nu există evaluări
  • Fisiere in C++
    Fisiere in C++
    Document7 pagini
    Fisiere in C++
    Vasy Andrew
    Încă nu există evaluări
  • Fisiere Text C++
    Fisiere Text C++
    Document4 pagini
    Fisiere Text C++
    Adrian NITU
    Încă nu există evaluări
  • Curs 13
    Curs 13
    Document17 pagini
    Curs 13
    Lungu Madalin
    Încă nu există evaluări
  • Prelucrarea Fisierelor in C ATP
    Prelucrarea Fisierelor in C ATP
    Document14 pagini
    Prelucrarea Fisierelor in C ATP
    mmmaya
    Încă nu există evaluări
  • Fişiere in C++
    Fişiere in C++
    Document10 pagini
    Fişiere in C++
    Delia-Iuliana Enache
    Încă nu există evaluări
  • Laboratorul 12. Operałii de Intrare/Ieşire. Fişiere
    Laboratorul 12. Operałii de Intrare/Ieşire. Fişiere
    Document8 pagini
    Laboratorul 12. Operałii de Intrare/Ieşire. Fişiere
    Nick Holdan
    Încă nu există evaluări
  • Teorie Fisiere
    Teorie Fisiere
    Document2 pagini
    Teorie Fisiere
    teodorcalin2007
    Încă nu există evaluări
  • Fisiere C++
    Fisiere C++
    Document5 pagini
    Fisiere C++
    p_isaic989
    Încă nu există evaluări
  • Fişiere C++
    Fişiere C++
    Document4 pagini
    Fişiere C++
    Antonio Roman
    Încă nu există evaluări
  • 7
    7
    Document23 pagini
    7
    ramsesaha
    Încă nu există evaluări
  • 4 Fluxuri
    4 Fluxuri
    Document10 pagini
    4 Fluxuri
    Dorw123
    Încă nu există evaluări
  • Streamuri
    Streamuri
    Document24 pagini
    Streamuri
    mateidlv28
    Încă nu există evaluări
  • Lucrare de Laborator NR - 4C++
    Lucrare de Laborator NR - 4C++
    Document13 pagini
    Lucrare de Laborator NR - 4C++
    Андрей Пырлог
    Încă nu există evaluări
  • 4 Serializare
    4 Serializare
    Document8 pagini
    4 Serializare
    Данилов Алина
    Încă nu există evaluări
  • Lucrarea 2 Python
    Lucrarea 2 Python
    Document29 pagini
    Lucrarea 2 Python
    Ana-Maria Tresca
    Încă nu există evaluări
  • Curs 4
    Curs 4
    Document38 pagini
    Curs 4
    patiusha
    Încă nu există evaluări
  • Tema 5
    Tema 5
    Document23 pagini
    Tema 5
    Catalina Caraman
    Încă nu există evaluări
  • Citirea Și Scrierea Fișierelor În C - C++
    Citirea Și Scrierea Fișierelor În C - C++
    Document18 pagini
    Citirea Și Scrierea Fișierelor În C - C++
    Buga Mariana
    Încă nu există evaluări
  • Comenzi de Baza in Linux
    Comenzi de Baza in Linux
    Document6 pagini
    Comenzi de Baza in Linux
    Daniel Serea
    Încă nu există evaluări
  • Python 2
    Python 2
    Document7 pagini
    Python 2
    Lavinia Rapa
    Încă nu există evaluări
  • Serializarea
    Serializarea
    Document4 pagini
    Serializarea
    winchester lung
    Încă nu există evaluări
  • Algoritmi de Prelucrare A Fisierelor Organizate Relativ
    Algoritmi de Prelucrare A Fisierelor Organizate Relativ
    Document20 pagini
    Algoritmi de Prelucrare A Fisierelor Organizate Relativ
    Codreanu Petru
    Încă nu există evaluări
  • Poo 12
    Poo 12
    Document26 pagini
    Poo 12
    Irina Paun
    Încă nu există evaluări
  • POO C7 JavaIO
    POO C7 JavaIO
    Document48 pagini
    POO C7 JavaIO
    Claudiu Iftimi
    Încă nu există evaluări
  • Seminar 01
    Seminar 01
    Document16 pagini
    Seminar 01
    Robert Adrian Pietroiu
    Încă nu există evaluări
  • Curs 11 - Stream-Uri PDF
    Curs 11 - Stream-Uri PDF
    Document5 pagini
    Curs 11 - Stream-Uri PDF
    Calin Luchian
    Încă nu există evaluări
  • Cursul 02 - ATP
    Cursul 02 - ATP
    Document49 pagini
    Cursul 02 - ATP
    Andrei Pricopi
    Încă nu există evaluări
  • Prelucrarea Fisierelor
    Prelucrarea Fisierelor
    Document19 pagini
    Prelucrarea Fisierelor
    Dragos George Spataru
    Încă nu există evaluări
  • Int Out Fisiere
    Int Out Fisiere
    Document2 pagini
    Int Out Fisiere
    Pop Alin
    Încă nu există evaluări
  • Teorie - Fisiere Text
    Teorie - Fisiere Text
    Document15 pagini
    Teorie - Fisiere Text
    cornel_mihai
    Încă nu există evaluări
  • SDA Lab 1
    SDA Lab 1
    Document16 pagini
    SDA Lab 1
    Ciobanu Alina
    Încă nu există evaluări
  • Lucrul Cu Fisiere
    Lucrul Cu Fisiere
    Document1 pagină
    Lucrul Cu Fisiere
    andreidino222
    Încă nu există evaluări
  • JAVA - Lucrare de Labarator
    JAVA - Lucrare de Labarator
    Document5 pagini
    JAVA - Lucrare de Labarator
    Valentin Bencheci
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document2 pagini
    Lab 1
    Michael
    Încă nu există evaluări
  • Capitolul4 Impress
    Capitolul4 Impress
    Document53 pagini
    Capitolul4 Impress
    Daniel Popa
    Încă nu există evaluări
  • Tivoli X150 Lista de Preturi
    Tivoli X150 Lista de Preturi
    Document5 pagini
    Tivoli X150 Lista de Preturi
    Daniel Popa
    Încă nu există evaluări
  • Capitolul1 Introducere
    Capitolul1 Introducere
    Document17 pagini
    Capitolul1 Introducere
    Daniel Popa
    Încă nu există evaluări
  • Capitolul4 Impress
    Capitolul4 Impress
    Document53 pagini
    Capitolul4 Impress
    Daniel Popa
    Încă nu există evaluări
  • Capitolul2 Writer
    Capitolul2 Writer
    Document128 pagini
    Capitolul2 Writer
    Daniel Popa
    Încă nu există evaluări
  • Info 2011
    Info 2011
    Document3 pagini
    Info 2011
    Daniel Popa
    Încă nu există evaluări
  • Divide Et Impera
    Divide Et Impera
    Document21 pagini
    Divide Et Impera
    Gabriela260667
    Încă nu există evaluări
  • Barem de Corectare BAC 2011 - Informatică Stiinte Ale Naturii (SN)
    Barem de Corectare BAC 2011 - Informatică Stiinte Ale Naturii (SN)
    Document3 pagini
    Barem de Corectare BAC 2011 - Informatică Stiinte Ale Naturii (SN)
    Sergiu A.
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document4 pagini
    Lab 1
    Daniel Popa
    Încă nu există evaluări
  • Lab 6
    Lab 6
    Document2 pagini
    Lab 6
    Daniel Popa
    Încă nu există evaluări
  • Lab 2
    Lab 2
    Document5 pagini
    Lab 2
    Daniel Popa
    Încă nu există evaluări
  • Curs 2
    Curs 2
    Document58 pagini
    Curs 2
    Daniel Popa
    Încă nu există evaluări
  • Lab 4
    Lab 4
    Document2 pagini
    Lab 4
    Daniel Popa
    Încă nu există evaluări
  • Curs 1
    Curs 1
    Document39 pagini
    Curs 1
    Daniel Popa
    Încă nu există evaluări
  • Curs 14
    Curs 14
    Document31 pagini
    Curs 14
    Daniel Popa
    Încă nu există evaluări
  • Curs 9
    Curs 9
    Document29 pagini
    Curs 9
    Daniel Popa
    Încă nu există evaluări
  • CAP12
    CAP12
    Document8 pagini
    CAP12
    Daniel Popa
    Încă nu există evaluări
  • CAP6
    CAP6
    Document10 pagini
    CAP6
    Daniel Popa
    Încă nu există evaluări
  • Info cls11
    Info cls11
    Document1 pagină
    Info cls11
    Daniel Popa
    Încă nu există evaluări
  • CAP9
    CAP9
    Document8 pagini
    CAP9
    Daniel Popa
    Încă nu există evaluări
  • Curs 3
    Curs 3
    Document38 pagini
    Curs 3
    Daniel Popa
    Încă nu există evaluări
  • CAP2
    CAP2
    Document9 pagini
    CAP2
    Daniel Popa
    Încă nu există evaluări
  • CAP10
    CAP10
    Document5 pagini
    CAP10
    Daniel Popa
    Încă nu există evaluări
  • Info cls10
    Info cls10
    Document1 pagină
    Info cls10
    Daniel Popa
    Încă nu există evaluări
  • Test Expresii Logice C
    Test Expresii Logice C
    Document2 pagini
    Test Expresii Logice C
    Daniel Popa
    Încă nu există evaluări
  • Info cls9
    Info cls9
    Document1 pagină
    Info cls9
    Daniel Popa
    Încă nu există evaluări
  • Informatica Clasa 9a
    Informatica Clasa 9a
    Document1 pagină
    Informatica Clasa 9a
    Daniel Popa
    Încă nu există evaluări
  • Info cls9 Scurt
    Info cls9 Scurt
    Document1 pagină
    Info cls9 Scurt
    Daniel Popa
    Încă nu există evaluări
  • Test C Expresii For While
    Test C Expresii For While
    Document2 pagini
    Test C Expresii For While
    Daniel Popa
    Încă nu există evaluări