• Nenhum resultado encontrado

Manipulação de Streams e arquivos

N/A
N/A
Protected

Academic year: 2021

Share "Manipulação de Streams e arquivos"

Copied!
21
0
0

Texto

(1)

Manipula

Manipula

ç

ç

ão de

ão de

Streams

Streams

e arquivos

e arquivos

Prof. Leandro Tonietto

Estruturas de Dados em C++ - Unisinos ltonietto@unisinos.br

http://www.inf.unisinos.br/~ltonietto mar-09

(2)

Introdução

Streams:

 Área de memória intermediária entre

software e hardware.

 Levam os bytes de dados para dispositivos. E

dos dispositivos até o programa. Exemplos:

cout

é uma stream associada com o dispositivo

padrão de saída (monitor), então qualquer byte

enviado para

cout

será exibido na tela.

cin

esta associada ao dispositivo de entrada

padrão (teclado). Recebe bytes digitados no

teclado para o programa em execução.

(3)

Introdução

Streams: Fluxo de bits

0010010110010100101111001

> teste cout << “Teste”; cout << “Teste”; Software Stream de escrita / saída Dispositivo de saída

0010010110010100101111001

cin >> dado; cin >> dado; Software Stream de leitura / entrada Dispositivo de entrada

(4)

Introdução

Existem streams associadas com qualquer

dispositivo do computador.

(5)

Programação com streams em C++

Streams padrão em C++.

 Objetos:

cin, cout, cerr e clog

 É necessário fazer:

#include <iostream>

 Não esquecer:

// geral using namespace std; // ou individual using std::cout; using std::cin;

(6)

Programação com streams em C++

Exemplo:

#include <iostream>

using std::cout;

int main(){

cout << “Hello world!!”;

return 0;

}

(7)

Programação com streams em C++

Exemplo:

#include <iostream>

using std::cin;

int main(){

int valor;

cin >> valor;

return 0;

}

(8)

Programação com streams em C++

Métodos de leitura/escrita:

 Alto nível:

• Manipulação de dados formatados (p.e. leitura direto para uma variável int: cin >> valor)

• Conversão automática de bytes para o formatação que está sendo lido; o mesmo se aplica para a escrita, conversão automática de dados de tipo qualquer para byte.

• Simples de serem usados, porém com problemas de desempenho.

(9)

Programação com streams em C++

Métodos de leitura/escrita:

 Baixo nível:

• Manipulação de bytes. Os bytes precisam ser tratados ou convertidos para o formato que se está utilizando. (exemplo de leitura: cin.read(buffer, 80))

• Mais complexo de se utilizar, porém muito mais rápido. • Não recomendado para pequenas quantidades de dados ou

manipulação com cin / cout, que em geral implica em manipulação de poucos dados.

• Deve ser utilizado para leitura/escrita de grande

quantidade de dados, proveniente de dispositivos externos ou mais lentos ou para manipulação em plataformas móveis.

(10)

Programação com streams em C++

Métodos de leitura/escrita:

 Dicas para decisão:

• Volume pequeno de dados no HD? Arquivos de

configuração, por exemplo.

– Alto nível

• São dados oriundos de uma conexão em rede?

– Baixo nível

• Dispositivos com recursos limitados (celulares,

PDAs,...)?

– Baixo nível

• Ações de leitura de dados inseridos pelo teclado no

prompt e exibição de dados na tela?

(11)

Programação com streams em C++

Exemplo de

leitura/escrita

alto-nível

:

#include <iostream>

using std::cin;

using std::cout;

int main(){

int var;

cin >> var;

cout << “O usuário digitou ” << var;

return 0;

}

(12)

Programação com streams em C++

Alternativas de

leitura/escrita

alto-nível

:

#include <iostream>

using std::cin;

using std::cout;

int main(){

char var;

var = cin.get();

cout << “O usuário digitou ”;

cout.put(var);

cout.put(‘ ‘).put(‘.’);

return 0;

}

(13)

Programação com streams em C++

Lendo uma linha inteira de dados:

#include <iostream>

using std::cin;

int main(){

char buffer[80];

// lê até encontrar “\n” ou até 80 char

cin.getline(buffer, 80);

cout << “O usuário digitou ” << buffer;

return 0;

}

AtenAtencom com ççãoãogetlinegetline: quando ocorre a leitura de uma string : quando ocorre a leitura de uma string ()() apapóós a leitura de s a leitura de dede dados dados num

numééricos devericos deve--se fazer se fazer cin.get(cin.get()) para para limpar o buffer antes de ler a string.

(14)

Programação com streams em C++

Pode ser usado tanto para streams de entrada e saída

Conforme ocorrem erros, alguns bits são marcados

Abaixo estão listados os bits, métodos e a condição

para o retorno verdadeiro

 eofbit – cin.eof() - Se o fim do arquivo foi encontado

 failbit – cin.fail() - Erro de formato sem perda de dados  badbit – cin.bad() - Erro com perda de dados. Erros mais

sérios

 goodbit – cin.good() - Se nenhum dos bits anteriores estão assinalados

 cin.clear() - Limpa os estados dos bits e deixa a stream como good.

(15)

Programação com streams em C++

Leitura baixo-nível:

 Deve-se acessar a n-esima posição de memória e

gravar X bytes a partir da mesma.

 Conceito de cabeçote de leitura:

• Primeiro posicionar o cabeçote leitura (posição de memória)

• Depois gravar dados em formato binário, um byte por vez.

Cabeçote de leitura/escrita

Memória: bytes da stream

(16)

Programação com streams em C++

Leitura baixo-nível:

 Exemplo: gravar o inteiro 2361 na posição 3

memória.

 Conceito de cabeçote de leitura:

• Converter número em bytes:

(00000000 00000000 00001001 00111001)

• Primeiro posicionar o cabeçote leitura na posição 3.

• Depois gravar dados em formato binário, um byte por vez.

Cabeçote de leitura/escrita

Memória: bytes da stream

(17)

Programação com streams em C++

Leitura baixo-nível:

 Exemplo: gravar o inteiro 2361 na posição 3

memória.

 Conceito de cabeçote de leitura:

• Converter número em bytes:

(00000000 00000000 00001001 00111001)

• Primeiro posicionar o cabeçote leitura na posição 3.

• Depois gravar dados em formato binário, um byte por vez.

Cabeçote de leitura/escrita

Memória: bytes da stream

(18)

Programação com streams em C++

Leitura baixo-nível:

 Exemplo: gravar o inteiro 2361 na posição 3

memória.

 Conceito de cabeçote de leitura:

• Converter número em bytes:

(00000000 00000000 00001001 00111001)

• Primeiro posicionar o cabeçote leitura na posição 3.

• Depois gravar dados em formato binário, um byte por vez.

Cabeçote de leitura/escrita

Memória: bytes da stream

(19)

Programação com streams em C++

Leitura baixo-nível:

 Exemplo: gravar o inteiro 3241 na posição 9

memória.

 Conceito de cabeçote de leitura:

• Converter número em bytes:

(00000000 00000000 00001100 10101001)

• Primeiro posicionar o cabeçote leitura na posição 9.

• Depois gravar dados em formato binário, um byte por vez.

Cabeçote de leitura/escrita

Memória: bytes da stream

(20)

Programação com streams em C++

Lê ou escreve um certo número de bytes

Escrita

 char buffer[80]

 seekp(10); //Posiciona para escrita

 cout.write(buffer,20) //Escreve 20 carac.

Leitura

 cin.seekg(10); //Posiciona para leitura

 cin.read(buffer,20) //lê 20 caracteres

Número de caracters lidos na última operação

de entrada

(21)

Programação com streams em C++

Para outros tipos de dados (não char[] ou char *):

 Deve-se fazer a conversão de para array de bytes (char [])  Comando reinterpret_cast: int v = 1; cout.write(reinterpret_cast<const char*>(&v),sizeof(v)); cin.read(reinterpret_cast<char*>(&v),sizeof(v)); Pessoa p; cout.write(reinterpret_cast<const char*>(&p),sizeof(p)); cin.read(reinterpret_cast<char*>(&p),sizeof(p));

Veremos mais sobre

Veremos mais sobre reinterpret_castreinterpret_cast na na apresenta

apresentaçção sobre arquivos, para utilizaão sobre arquivos, para utilizaçção ão de

Referências

Documentos relacionados

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

O objetivo do curso foi oportunizar aos participantes, um contato direto com as plantas nativas do Cerrado para identificação de espécies com potencial

esta espécie foi encontrada em borda de mata ciliar, savana graminosa, savana parque e área de transição mata ciliar e savana.. Observações: Esta espécie ocorre

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

A assistência da equipe de enfermagem para a pessoa portadora de Diabetes Mellitus deve ser desenvolvida para um processo de educação em saúde que contribua para que a

servidores, software, equipamento de rede, etc, clientes da IaaS essencialmente alugam estes recursos como um serviço terceirizado completo...

Os Oficiais de Registro Civil das Pessoas Na- turais do Estado de São Paulo também têm competência para os atos notariais de reconhecimento de firma, autenticação de cópia

No sentido de reverter tal situação, a realização deste trabalho elaborado na disciplina de Prática enquanto Componente Curricular V (PeCC V), buscou proporcionar as