Módulo 2 Acesso a Arquivos Métodos e Algoritmos Computacionais C++ (Rone Ilídio)
Manipulação de Objetos iostream Bytes armazenados na memória Tipos: Arquivos com caracteres: textos Arquivos binários: programas, foto, música Biblioteca fstream.h leitura e gravação de arquivos.
Tipos de objetos fstream ofstream: abre arquivos para escrita ifstream: abre arquivos para leitura fstream: abre arquivos para leitura, escrita ou ambos
Gravando em Arquivo Texto
Gravando em Arquivo Texto #include <fstream.h> #include <conio.h> #include <iostream> using namespace std; int main(){ ofstream fout("teste.txt"); fout<<"universidade Federal de São João del-rei"; fout<<"\ncampus Alto Paraopeba"; fout<<"\nouro Branco"; fout<<"\nminas Gerais"; cout << "fim"; getch();
Gravando em Arquivo Texto Cria-se um objeto ofstream chamado fout A função open abre o arquivo que será escrito O operador << é sobrecarregado, na classe ostream (objetos de destino de dados recebem o fluxo de caracteres) A função close fecha o arquivo
Gravando em Arquivo Texto #include <fstream.h> int main(){ ofstream fout("teste.txt"); fout<<"universidade Federal de São João del-rei"; fout<<"\ncampus Alto Paraopeba"; fout<<"\nouro Branco"; fout<<"\nminas Gerais"; fout.close();
Gravando em Arquivo Texto Cria-se um objeto ofstream chamado fout O nome do arquivo destino é passado no construtor O arquivo é associado ao objeto ofstream O operador << é sobrecarregado, na classe ostream (objetos de destino de dados recebem o fluxo de caracteres) Quando o programa termina, o arquivo associado é automaticamente fechado (não precisa fechá-lo)
#include <fstream.h> #include <iostream.h> int main(){ ifstream file; char output[100]; int x; file.open("para_ler.txt"); //Abre o arquivo file>>output; //Lê uma palavra cout<<output<<"\n"; //Exibe na tela o resultado da leitura file>>x; //Lê o inteiro cout<<x; //Exibe novamente file.close(); //Fecha getchar(); //Obs: o arquivo deve ter uma string e um inteiro
Lendo do Teclado e Gravando um #include <fstream.h> #include <iostream> #include <conio.h> using namespace std; int main(){ ofstream fout("teste1.txt"); char ch; Caractere por Vez while(1){ ch = getche(); //lê do teclado if (ch == 27) break;//27 = ESC fout.put(ch); //ESC para terminar
Lendo Arquivo Texto
Lendo Arquivo Texto Forma de leitura Linha por linha Palavra por palavra Caractere por Caractere
Lendo Arquivo Texto Linha por Linha #include <fstream.h> #include <iostream> #include <conio.h> using namespace std; int main(){ const int MAX = 80; char buff[max]; ifstream fin("teste.txt"); while(fin.getline(buff, MAX)){ cout << buff << '\n'; getch();
Lendo Arquivo Texto Caractere por Caractere #include <fstream.h> #include <iostream> #include <conio.h> using namespace std; int main(){ char b; ifstream fin("teste.txt"); while(fin.get(b)){ cout << b<< '\n'; getch();
Lendo Arquivo Texto Palavra por Palavra #include <fstream.h> #include <iostream> #include <conio.h> using namespace std; int main(){ const int MAX = 80; char buff[max]; ifstream fin("teste.txt"); while(fin>> buff){ cout << buff << '\n'; getch();
Lendo Arquivo Texto Palavra por Palavra Utiliza-se o operador >> Pode-se ler qualquer tipo primitivo de dados Atenção com o tipo da variável Exemplo: Sabe-se que o arquivo texto contém a sequência de uma string e um inteiro, como segue: rone 18 maria 20 joao 40 ze 10
Lendo Arquivo Texto Palavra por Palavra #include <fstream.h> #include <iostream> #include <conio.h> using namespace std; int main(){ ifstream fin("stringinteiro.txt"); char nome[50]; int idade; while(fin>>nome){ fin>>idade; cout << "\n" << nome << " " << idade; getch();
Problema da função eof de ifstream A função eof() repete a última leitura feita. Exemplo de texto: int main(){ char dado; ifstream fin("teste.txt"); while(!fin.eof()){ fin.get(dado); cout<<dado<<endl; getche(); Arquivo texto contendo somente: 1 2 3 Resultado: 1 2 3 3
Função Open Associa um stream a um arquivo (no exemplos anteriores, foi chamada dentro do construtor) Assim como o construtor, pode receber 2 parâmetros: nome do arquivo e modo de abertura (a seguir) ios::in leitura ios::out gravação ios::ate abre e posiciona no final (lê e grava) ios::app grava a partir do fim ios::binary abre binário (default é texto)
Grava no Final do Arquivo #include <iostream.h> #include <conio.h> #include <fstream.h> int main(){ ofstream entrada; entrada.open("texto.txt",ios::app); entrada << "\nnova linha"; entrada << "\nmais uma linha"; entrada.close(); cout << "Fim!"; getche();
Modo Texto e Modo Binário Durante a leitura de um arquivo, a quebra de linha é contabilizada como caracter Em arquivos lidos como binários, cada quebra conta 2 caracteres (carriage-return e linefeed (CR/LF) Em arquivos lidos como caracteres, cada quebra conta 1 caractere ( \n )
#include <conio.h> #include <iostream.h> #include<fstream.h> int main(){ ifstream fin; char ch; int cont = 0; fin.open("nome.txt ); while (fin.get(ch)) { cout << ch ; cont ++; #include <conio.h> #include <iostream.h> #include<fstream.h> int main(){ ifstream fin; char ch; int cont = 0; fin.open("nome.txt",ios::binary); while (fin.get(ch)) { cout << ch ; cont ++; cout << "\ncont = "<<cont; getch(); cout << "\ncont = "<<cont; getch();
Modo Texto e Modo Binário Considere o arquivo teste.txt, da seguinte forma: ABC DEF com quebra de linha sem quebra de linha Execução do programa c:\programa1 teste.txt count = 7 c:\programa2 teste.txt count = 8
Modo Texto e Modo Binário Na execução do 1º programa, a leitura é default, por caractere quebra de linha é um caractere Na execução do 2º programa, a leitura é binário quebra de linha são dois caracteres caractere
Função seekg de ifstream Todo arquivo tem 2 ponteiros: posição corrente de leitura posição corrente de gravação A função seekg posiciona o cursor para leitura Sintaxe: seekg(long deslocamento, posição) A posição pode ser: ios::beg início do arquivo ios::cur posição corrente ios::end final do arquivo
Função seekg de ifstream #include <fstream.h> #include <conio.h> #include <iostream.h> int main(){ char buff[100]; ifstream fin; fin.open("teste.txt"); // fin.seekg(-5,ios::end); //Lê as 5 letras finais fin.seekg(2,ios::beg); //Não lê as duas primeiras letras while(fin.getline(buff,100)){ cout << buff << "\n"; getch();
Função tellg() e tellp() tellg(): retorna a posição do cursor de leitura tellp(): retorna a posição do cursor de escrita Obs: O retorno é em número de caracteres
#include <fstream.h> #include <iostream.h> #include <conio.h> #include <string.h> int main(){ char buff[100]; ifstream fin; fin.open("teste1.txt"); while(fin >> buff){ if(strcmp(buff, Meu")==0){ cout<<"\nposicao:"<<fin.tellg(); getch(); Arquivo texto: Meu nome é rone trabalho na ufsj Resultado = Posicao: 5