Buscar

[Prof. Emiliana]aula_pratica_16

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE FEDERAL DE OURO PRETO 
INSTITUTO DE CIÊNCIAS EXATAS E BIOLÓGICAS 
DEPARTAMENTO DE COMPUTAÇÃO 
CIC107 – PROGRAMAÇÃO DE COMPUTADORES I 
 
12ª Aula prática 
 
Arquivos de Texto 
 
C++ fornece três classes para lidar com arquivos: 
• ofstream: para escrever em arquivos (”o” = output) 
• ifstream: para ler arquivos (“i” = input) 
• fstream: para ler e/ou escrever em arquivos 
 
O uso destas classes é bastante semelhante ao uso de cin e cout aos quais já estamos 
habituados. A única diferença é que temos que associá-los a arquivos. Vejamos o próximo 
exemplo: 
 
// operações básicas de arquivos 
 
#include <iostream> 
#include <fstream> 
 
using namespace std; 
 
int main () 
{ 
 ofstream meuarquivo; 
 
 //cria e abre um arquivo chamado exemplo.txt 
 meuarquivo.open ("exemplo.txt"); 
 meuarquivo << "Escrevendo neste arquivo.\n"; 
 meuarquivo.close(); // fecha o arquivo 
 
 return 0; 
} 
 
Este programa cria um arquivo chamado “exemplo.txt” (ou sobrescreve, caso o arquivo já 
exista) inserindo nele um texto da mesma forma que fazemos para cout, mas agora usando 
meuarquivo (que é do tipo ofstream). Note que é preciso chamar a biblioteca “fstream” para 
poder trabalhar com arquivos. 
 
A primeira operação necessária quando se lida com arquivos é associar nossa variável 
meuarquivo a um arquivo. Este procedimento é conhecido como “abrir’’ o arquivo. Assim, 
antes de ler ou escrever um arquivo executamos a operação open e como parâmetro o nome 
do arquivo a ser aberto (string). 
 
Para verificar se a operação open foi bem-sucedida pode-se utilizar o comando is_open() 
que retorna verdadeiro ou falso, dependendo se foi ou não possível abrir o arquivo. 
Quando terminamos a escrita ou leitura de um arquivo deve ser fechado de forma que seus 
recursos se tornem disponíveis novamente. Usamos para isso a operação close(). 
 
Vejamos outro exemplo onde criamos um arquivo de texto onde são inseridas duas 
informações. 
 
#include <iostream> 
#include <fstream> 
 
using namespace std; 
 
int main () 
{ 
 ofstream meuarquivo ("exemplo.txt"); 
 
 if (meuarquivo.is_open()) { 
 meuarquivo << "Informacao_1\n"; 
 meuarquivo << "Informacao_2\n"; 
 meuarquivo.close(); 
 } else 
 cout << "Nao foi possivel abrir o arquivo"; 
 return 0; 
} 
 
A diferença desse exemplo com o anterior é que quando declaramos a variável associamos 
imediatamente ela a um arquivo, passando o nome do arquivo como um parâmetro de 
entrada. Depois de declarar a variável ofstream e associar ela a um arquivo verificamos se 
conseguiu abrir o arquivo com sucesso através do comando is_open(). 
 
Vejamos um exemplo de leitura de um arquivo 
 
#include <iostream> 
#include <fstream> 
 
using namespace std; 
 
int main () 
{ 
 char texto[64]; 
 ifstream meuarquivo ("exemplo.txt"); 
 
 if (meuarquivo.is_open()) { 
 while (! meuarquivo.eof() ) { 
 meuarquivo >> texto; 
 cout << texto << endl; 
 } 
 meuarquivo.close(); 
 } else 
 cout << "Nao foi possivel abrir o arquivo"; 
 return 0; 
 
} 
 
Este exemplo lê os dados de um arquivo-texto e os imprime na tela. Note que usamos a 
operação eof() (= "End-of-file" = fim-de-arquivo) que retorna verdadeiro caso o fim do 
arquivo tenha sido alcançado, ou falso caso contrário. Assim, criamos um laço que só 
termina quando a leitura chega ao final do arquivo (isto é, quando eof() == true). 
 
Além de salvar em arquivos mensagens de texto, também podemos salvar dados numéricos 
com ou sem formatação. A formatação da saída será feita utilizando a biblioteca 
<oimanip>. Esta formatação será exatamente igual a que usamos para as saídas das 
variáveis na tela através do comando cout. 
 
Vejamos o seguinte exemplo: 
 
Criar uma matriz de reais de dimensão 3x3, inserir valores na matriz. Depois de inserir 
todos os valores, escrevê-los em um arquivo. Gravar os valores com três dígitos decimais. 
 
#include <iostream> 
#include <iomanip> 
#include <fstream> 
 
using namespace std; 
 
int main () 
{ 
 float dados[3][3]; 
 // inserir dados na matriz 
 for (int i = 0; i < 3; i++) 
 for (int j = 0; j < 3; j++) 
 cin >> dados[i][j]; 
 
 ofstream meuarquivo ("dadosArquivo.txt"); 
 
 for (int i = 0; i < 3; i++) 
 { 
 for (int j = 0; j < 3; j++) 
 meuarquivo<<fixed<<setprecision(3)<<dados[i][j]<<" "; 
 meuarquivo << endl; 
 } 
 meuarquivo.close(); 
 return 0; 
} 
 
Nesse programa usamos a formatação fixed , que é utilizada para mostrar um número com 
decimais (por default são 6), e setprecision() que, quando utilizado junto com fixed, serve 
para indicar o número de decimais a ser mostrado. 
 
Agora vamos realizar a leitura do arquivo dadosArquivo.txt e salvar os valores em uma 
matriz. 
 
 
#include <iostream> 
#include <iomanip> 
#include <fstream> 
 
using namespace std; 
 
int main() 
{ 
 float M[3][3]; 
 
 ifstream arq ("dadosArquivo.txt"); 
 // leitura do arquivo 
 if (arq.is_open()) 
 { 
 for (int i = 0; i < 3; i++) 
 for (int j = 0; j < 3; j++) 
 arq >> M[i][j]; 
 } 
 // mostra a matriz na tela 
 for (int i = 0; i < 3; i++) 
 { 
 for (int j = 0; j < 3; j++) 
 cout << M[i][j]; 
 cout << endl; 
 } 
 arq.close(); 
 return 0; 
} 
 
Exercícios 
 
1. Crie um arquivo de dados através de um editor de textos (por exemplo, notepad), a 
continuação elabore um programa para leitura desses dados. 
2. Crie um vetor de double de 10 elementos. Em seguida, insira valores no vetor, e 
salve os dados em um arquivo. Depois, crie um segundo vetor de tamanho 10 e 
preencha o vetor com os dados salvos no arquivo. 
3. Escreva um programa que conte o número de caracteres de um arquivo-texto (como 
cada caracter ocupa 1 byte, você terá calculado o tamanho do arquivo em bytes). 
4. Escreva um programa C++ que crie uma cópia de um arquivo "x.txt" dando-lhe o 
nome de "copia_x.txt". 
5. Gere uma estrutura cadastro_aluno com os seguintes dados: nome, idade, nota1, 
nota2. Insira n alunos, depois calcular a média de notas para cada aluno. 
Finalmente, salvar em um arquivo os dados da estrutura e a média de notas. Repita 
o processo para cada aluno.

Continue navegando