• Nenhum resultado encontrado

AULA 17 - ARQUIVOS

N/A
N/A
Protected

Academic year: 2021

Share "AULA 17 - ARQUIVOS"

Copied!
5
0
0

Texto

(1)

A

RQUIVOS DE

T

EXTO

Na aula de hoje, a escrita e leitura de dados em arquivos de texto será abordada.

A linguagem C manipula arquivos com o uso de fluxos de dados, chamados de streams. Um stream é um fluxo de dados associado a um dispositivo físico, podendo este ser uma impressora, a tela de um computador ou até mesmo um arquivo do disco. A utilização de streams torna o processo de entrada e saída de dados “independente” do dispositivo. Essa abstração facilita o desenvolvimento de programas.

Existem dois tipos básicos de fluxos de dados na linguagem C: streams de texto e streams binárias.

No fluxo de texto o que transita pelo fluxo são caracteres, dessa maneira, os caracteres enviados pelo fluxo podem sofrer conversões de acordo com a plataforma. Por exemplo, o caractere ‘\n’ não possui a mesma representação numérica nos sistemas UNIX e WINDOWS. No UNIX, apenas o caractere de controle alimentação de linha é enviado, enquanto no WINDOWS, dois caracteres de controle são enviados: retorno de carro e alimentação de linha.

No fluxo binário, números brutos transitam pelo fluxo, portanto esses números não sofrem alterações, sendo independentes da plataforma onde o fluxo está ocorrendo.

A base para a manipulação de arquivos em C são as funções disponíveis na biblioteca de entrada e saída padrão <stdio.h>. As principais funções são apresentadas abaixo:

(2)

ESCREVENDO EM UM ARQUIVO DE TEXTO

Estude o Programa 1. #include <stdio.h> #include <stdlib.h> int main(void) {

FILE *p; //ponteiro para arquivo...

p = fopen("TESTE.txt", "w"); //abrindo arquivo para escrita if(p == NULL) printf("Problemas ao abrir o arquivo..."); else

{

putc('O', p); putc('L', p);

putc('A', p); //escrevendo caracteres

putc('\n', p);

fputs("Escrevendo em um arquivo\n", p); //escrevendo string

fprintf(p,"Escrevendo numero: %d e %f", 10, 4.3e-2); //escrevendo + coisas

fclose(p); //fechado arquivo

}

system("PAUSE"); return 0;

}

Programa 1 Escrevendo em um arquivo de texto.

Perceba a primeira linha do programa principal.

FILE *p;

Essa linha declara um ponteiro para arquivo. Este ponteiro indicará em qual arquivo ou dispositivo o programa está escrevendo ou de qual dispositivo ou arquivo a leitura é efetuada. Ele é recorrentemente utilizado nas funções de entrada e saída de dados.

A segunda linha:

p = fopen("TESTE.txt", "w");

Faz com que um arquivo com nome TESTE.txt seja aberto em modo escrita. A primeira string enviada para a função como parâmetro informa o nome do arquivo. A segunda string enviada como parâmetro da função indica o modo como o arquivo será aberto. Os modos são apresentados abaixo.

(3)

A terceira linha verifica se o arquivo foi aberto corretamente. É imprescindível verificar se

fopen() teve sucesso. Isso é facilmente realizado, uma vez que em caso de erro, a função fopen() retorna NULL (NULL é uma definição). A linha:

if(p == NULL) printf("Problemas ao abrir o arquivo...");

Realiza esta tarefa.

Caso nenhum arquivo com o nome especificado for encontrado, um arquivo será automaticamente criado

A função putc() escreve no arquivo apontado por p um caractere.

.

A função fputs() escreve no arquivo apontado por p uma string.

A função fprintf() funciona exatamente da mesma maneira que a função printf(),

porém enviando os caracteres para um arquivo ao invés de para o terminal. Após a operação com o arquivo, a função fclose() fecha o arquivo.

É muito importante perceber que quando o modo “w” é selecionado e um arquivo com o nome especificado em fopen() existe, esse arquivo será sobre-escrito, e o conteúdo original será

perdido

Exercício 1 Escreva um programa que leia 10 strings do teclado e salve as strings digitadas em um

arquivo com nome especificado pelo próprio usuário do programa.

. Quando se deseja adicionar texto a um arquivo, deve-se abrir o arquivo com o modo “a”.

Exercício 2 Rode o programa acima algumas vezes utilizando o modo “w” e observe o que ocorre

(4)

LENDO UM ARQUIVO DE TEXTO

A leitura de um arquivo de texto é feita de maneira semelhante ao realizado anteriormente, porém, as funções de leitura serão utilizadas e o modo de abertura dos arquivos será diferente. Observe o Programa 2, onde o arquivo criado no Programa 1 será lido e impresso na tela.

#include <stdio.h> #include <stdlib.h> int main(void) {

FILE *p; //ponteiro para arquivo...

char str[1000], c; int i;

float f;

p = fopen("TESTE.txt", "r"); //abrindo arquivo para leitura if(p == NULL) printf("Problemas ao abrir o arquivo..."); else

{

c = getc( p ); //realiza a leitura um caractere do arquivo apontado por p.

putchar( c ); //imprime caractere no terminal

putchar( '\n' ); //quebra linha terminal

fgets(str, 1000, p); // realiza a leitura uma linha (ou 1000 caracteres)

puts( str ); //imprime a string lida

fgets(str, 1000, p); // realiza a leitura uma linha (ou 1000 caracteres)

puts( str ); //imprime a string lida

fscanf(p, "%s", str); //scanf le string até espaço...

puts( str ); //imprime a string lida

fscanf(p, "%s", str);

puts( str ); //imprime a string lida

fscanf(p, "%d", &i); //lendo um inteiro

printf("%d", i); //imprimindo o inteiro na tela

putchar( getc(p) ); putchar( getc(p) ); putchar( getc(p) ); fscanf(p,"%f",&f); //lendo um float

printf("%e",f); //imprimindo um float na tela

putchar('\n');

fclose(p); //fechando arquivo

}

system("PAUSE"); return 0;

}

Programa 2 Lendo um arquivo.

O processo de leitura (principalmente utilizando fscanf()) é um pouco mais complicado,

pois é necessário saber como os dados são armazenados no arquivo de modo a realizar a leitura de números. É importantíssimo perceber que não é o número 10 que está armazenado no arquivo, e sim sua representação ASCII. Quando se deseja trabalhar com dados binários – ou brutos, aconselha-se utilizar outras funções que não serão apresentadas nesta disciplina: as funções

(5)

A função getc() realiza a leitura de um caractere do arquivo. A função fgets() realiza a

leitura de uma string do arquivo até que o caractere de nova linha seja encontrado ou até um número especificado de caracteres (o que ocorrer antes).

A função getc() retorna EOF (uma definição – end of file) quando o final do arquivo for

alcançado. Estude o programa abaixo.

#include <stdio.h> #include <stdlib.h> int main(void) {

FILE *p; //ponteiro para arquivo...

char c;

p = fopen("TESTE.txt", "r"); //abrindo arquivo para leitura if(p == NULL) printf("Problemas ao abrir o arquivo..."); else

{

c = getc( p ); while( c != EOF ) {

putchar( c ); //imprime caractere no terminal

c = getc( p ); //lendo um caractere do arquivo apontado por p.

}

putchar('\n'); }

fclose(p); //fechando arquivo

system("PAUSE"); return 0;

}

Programa 3 Utilizando EOF para ler todo arquivo de texto.

Exercício 3 Utilize a rotina acima para abrir qualquer arquivo de texto de seu computador

imprimindo todo o conteúdo do arquivo na tela. Cuidado. Indique o modo leitura.

É possível, ainda, remover arquivos utilizando a função remove(). Basta informar a função

através de uma string o nome do arquivo a ser deletado. O Programa 4 apaga o arquivo TESTE.txt manipulado até agora. Estude-o.

#include <stdio.h> #include <stdlib.h> int main(void) {

if( remove("TESTE.txt") ) printf("Problemas ao abrir o arquivo...\n"); else printf("Arquivo deletado...\n");

system("PAUSE"); return 0;

}

Programa 4 Removendo arquivos.

Exercício 4 Desenvolva um programa que realiza a leitura de um arquivo de texto, copiando o

Referências

Documentos relacionados

De seguida, vamos adaptar a nossa demonstrac¸ ˜ao da f ´ormula de M ¨untz, partindo de outras transformadas aritm ´eticas diferentes da transformada de M ¨obius, para dedu-

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

Apesar dos esforços para reduzir os níveis de emissão de poluentes ao longo das últimas décadas na região da cidade de Cubatão, as concentrações dos poluentes

Considerando-se que o trabalho de Coordenação Pedagógica revela complexidades pró- prias que, num contexto prático, posiciona o profissional perante a validação de registros de

Este era um estágio para o qual tinha grandes expetativas, não só pelo interesse que desenvolvi ao longo do curso pelas especialidades cirúrgicas por onde

5) “Estado da arte” do desenvolvimento local sertaginense. “A Sertã continua a ser pequenina e com pouca população. O setor turístico tem vindo a melhorar e temos

Neste estudo foram estipulados os seguintes objec- tivos: (a) identifi car as dimensões do desenvolvimento vocacional (convicção vocacional, cooperação vocacio- nal,

Os resultados não foram satisfatórios, para alguns alunos, podemos dizer que está sendo positivo, mas para a maioria está sendo negativo, pela dificuldade de acesso.. Não