Buscar

Aula_19 - Arquivos Sequenciais

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)

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais