• 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