Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Clique para editar o estilo do título mestre Clique para editar o estilo do subtítulo mestre Aula 19 – Arquivos Arquivos de acesso seqüencial Aula 19 - Arquivos(1) * * * - 18 Objetivos Ser capaz de criar, ler, gravar e utilizar arquivos seqüenciais. Aula 19 - Arquivos(1) * * * - 18 Introdução O armazenamento de dados em variáveis e arrays é temporário; Arquivos são usados para armazenamento permanente de dados; Computadores podem armazenar e acessar dados em dispositivos secundários de armazenamento Discos magnéticos Fitas magnéticas Discos ópticos Aula 19 - Arquivos(1) * * * - 18 Hierarquia de Dados Registro Bit Campo 1 Byte (Caractere ASCII J) Arquivo Aula 19 - Arquivos(1) * * * - 18 Hierarquia de Dados Contas a pagar Professores Alunos Banco de Dados Aula 19 - Arquivos(1) * * * - 18 Formas de Acesso Pelo menos um campo em cada registro é escolhido como chave de registro; Arquivo de acesso seqüencial; Arquivo de acesso aleatório. Aula 19 - Arquivos(1) * * * - 18 Arquivos e streams Em C++ cada arquivo é uma seqüência de bytes; Cada arquivo termina com um marcador de fim de arquivo; Quando um arquivo é aberto, um objeto é criado e um stream é associado àquele objeto. Aula 19 - Arquivos(1) * * * - 18 Arquivos e streams Arquivos são abertos criando-se objetos das classes stream: ifstream, ofstream ou fstream ios ostream istream fstream iostream ifstream ofstream fstream iostream Aula 19 - Arquivos(1) * * * - 18 Arquivos seqüenciais Registros são armazenados em uma ordem seqüencial; Geralmente, segundo o campo-chave dos registros. Aula 19 - Arquivos(1) * * * - 18 Exemplo – criando um arquivo seqüencial Escrever um programa para criar um arquivo sequencial contendo dados de contas de clientes de uma empresa. Para cada cliente estão armazenados: número da conta; nome do cliente; saldo da conta (valor devido). Aula 19 - Arquivos(1) * * * - 18 #include <iostream> using std::cout; using std::cin; using std::ios; using std::cerr; using std::endl; #include <fstream> using std::ofstream; #include <cstdlib> int main() { //construtor de ofstream abre arquivo ofstream outArquivoCliente("clientes.dat",ios::out ); if ( !outArquivoCliente ) { cerr<<"Arquivo nao pode ser aberto"<<endl ; exit( 1 ); // prototipo em cstdlib } Aula 19 - Arquivos(1) * * * - 18 int conta; char nome[ 30 ]; double saldo; cout<<"Entre com a conta, nome, e saldo.\n" << "Entre com fim-de-arquivo para terminar a entrada.\n ?"; while ( cin >> conta >> nome >> saldo ) { outArquivoCliente<<conta<<' '<<nome<< ' ' << saldo; cout << “\n? "; } system ("PAUSE"); return 0; //destrutor de ofstream fecha arquivo } O arquivo pode ser fechado explicitamente: outArquivoCliente.close(); pode melhorar o desempenho ! Aula 19 - Arquivos(1) * * * - 18 Exemplo de execução Entre com a conta, nome, e saldo. Entre com fim-de-arquivo para terminar a entrada ?1 Ana 451.69 ?2 Joao 145.78 ?3 Joana 748.65 ?4 Tiago 784.9 ?5 Andrea 417.58 Arquivo: clientes.dat Aula 19 - Arquivos(1) * * * - 18 Lendo em um arquivo sequencial Arquivos são abertos para leitura criando-se um objeto ifstream ifstream inArquivoClientes (“clientes.dat”, ios::in); Aula 19 - Arquivos(1) * * * - 18 Exemplo – lendo um arquivo sequencial Escrever um programa para ler um arquivo sequencial contendo os dados das contas de clientes e imprimi-los. Aula 19 - Arquivos(1) * * * - 18 #include <iostream> #include <fstream> using namespace std; int main() { // construtor de ifstream abre o arquivo ifstream inArquivoCliente ("clientes.dat", ios::in); if (!inArquivoCliente) { cerr<<"Arquivo nao pode ser aberto"<<endl ; exit( 1 ); // prototipo em cstdlib } int conta; char nome[ 30 ]; double saldo; while (inArquivoCliente>>conta>>nome>> saldo) cout<<conta<<“\t"<< nome<< "\t"<< saldo<< endl; return 0; //destrutor de ofstream fecha arquivo } Aula 19 - Arquivos(1) * * * - 18 Se quisermos usar uma função para imprimir os dados do arquivo: void imprimeLinha( int c, const char * const nome, double sal ) { cout << setiosflags( ios::left ) << setw( 10 ) << c << setw( 13 ) << nome << setw( 7 ) << setprecision( 2 ) << sal << '\n'; } Aula 19 - Arquivos(1) * * * - 18 ... int conta; char nome[ 30 ]; double saldo; while (inArquivoCliente>>conta>>nome>> saldo) imprimeLinha(conta, nome, saldo); system ("PAUSE"); return 0; //destrutor de ofstream fecha arquivo } Aula 19 - Arquivos(1)
Compartilhar