Introdução à Programação Engenharia da Computação
-
Upload
linus-rosario -
Category
Documents
-
view
18 -
download
0
description
Transcript of Introdução à Programação Engenharia da Computação
![Page 1: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/1.jpg)
INTRODUÇÃO À PROGRAMAÇÃOENGENHARIA DA
COMPUTAÇÃO
Aula Prática 12
Operações com Arquivos
Monitoria 2013.1
![Page 2: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/2.jpg)
A estrutura FILE
É como um tipo de dado, mas não é um tipo propriamente dito
Definido no arquivo cabeçalho stdio.h da biblioteca
Declarar um ponteiro de arquivo Exemplo:
FILE *fp;
![Page 3: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/3.jpg)
Abrindo e Fechando Arquivos
FILE *fopen(char *nomeDoArquivo, char *modo); Abre um arquivo e retorna um ponteiro para ele Se algum erro ocorrer a constante NULL é retornada Exemplo:
○ fp = fopen(“Arquivo.txt”, “r”); É de fundamental importância verificar se o arquivo foi aberto
corretamente.
int fclose(FILE *fp); Fecha o arquivo passado como parâmetro Retorna 0 se o arquivo foi fechado corretamente Retorna a constante EOF se algum erro ocorreu Exemplo:
○ fclose(fp); É muito importante fechar todos os arquivos que o seu programa abriu, isto
evita a perda dos dados armazenados no buffer. Fechar um arquivo faz com que qualquer caractere que tenha permanecido
no "buffer" associado ao fluxo de saída seja gravado.
![Page 4: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/4.jpg)
Exit
Aborta a execução do programa. Protótipo:
void exit (int codigo_de_retorno); Contida no arquivo de cabeçalho stdlib.h. Importante para erros com arquivos e alocação
dinâmica. Exemplo:
if(!fp)
exit(1);
![Page 5: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/5.jpg)
Modo Significado
"r" Abre um arquivo texto para leitura. O arquivo deve existir antes de ser aberto.
"w"Abrir um arquivo texto para gravação. Se o arquivo não existir, ele será criado. Se já existir, o conteúdo anterior será destruído.
"a"
Abrir um arquivo texto para gravação. Os dados serão adicionados no fim do arquivo ("append"), se ele já existir, ou um novo arquivo será criado, no caso de arquivo não existente anteriormente.
"rb"Abre um arquivo binário para leitura. Igual ao modo "r" anterior, só que o arquivo é binário.
"wb"Cria um arquivo binário para escrita, como no modo "w" anterior, só que o arquivo é binário.
"ab"Acrescenta dados binários no fim do arquivo, como no modo "a" anterior, só que o arquivo é binário.
"r+"Abre um arquivo texto para leitura e gravação. O arquivo deve existir e pode ser modificado.
"w+"Cria um arquivo texto para leitura e gravação. Se o arquivo existir, o conteúdo anterior será destruído. Se não existir, será criado.
"a+"
Abre um arquivo texto para gravação e leitura. Os dados serão adicionados no fim do arquivo se ele já existir, ou um novo arquivo será criado, no caso de arquivo não existente anteriormente.
"r+b"Abre um arquivo binário para leitura e escrita. O mesmo que "r+" acima, só que o arquivo é binário.
"w+b"Cria um arquivo binário para leitura e escrita. O mesmo que "w+" acima, só que o arquivo é binário.
"a+b"Acrescenta dados ou cria uma arquivo binário para leitura e escrita. O mesmo que "a+" acima, só que o arquivo é binário
![Page 6: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/6.jpg)
Modo texto x Modo binário
Casos Modo texto Modo Binário
Interpretação docaractere '\n'
'\n' (1 byte) CR/LF (2 bytes)
Interpretação doCaractere
'\x1A'(Ctrl + Z)Sai do programa
É um caracterequalquer
Interpretação dosNúmeros
Cada dígito éinterpretado como um
caractere(char)
Um número éinterpretado
como umnúmero(int, float...)
![Page 7: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/7.jpg)
Leitura e gravação em alto nível
Caractere a caracterefgetc e fputc
Linha a linhafgets e fputs
Forma formatadafscanf e fprintf
Bloco de dadosfread e fwrite
![Page 8: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/8.jpg)
Caractere a caractere int fgetc(FILE *fp);
Lê um caractere de fpRetorna EOF se houver erroExemplo:
○ fgetc(fp);
int fputc(int c, FILE *fp);Escreve um caractere em fpRetorna EOF se houver erroExemplo:
○ fputc(‘A’, fp);
![Page 9: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/9.jpg)
Linha a linha char *fgets(char *str, int tamanho, FILE *fp);
Lê no máximo tamanho caracteres de fp e guarda em str
Se a função encontrar ‘\n’ ou EOF ela para Exemplo:
○ fgets(string, 80, fp);
char *fputs(char *str, FILE *fp); Imprime uma string no arquivo Exemplo:
○ fputs(string, fp);
![Page 10: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/10.jpg)
Forma formatada
int fscanf(FILE *pf, char *str, ...);Similar a scanf() porém lê de um arquivoExemplo:
○ fscanf(fp, “%d %c”, &num, &ch);
int fprintf(FILE *pf, char *str, ...);Similar a printf() porém escreve em um arquivoExemplo:
○ fprintf(fp, “%d %c”, num, ch);
![Page 11: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/11.jpg)
fread int fread(void *buffer, int numBytes, int qtd, FILE *pf);
buffer é o local onde os dados lidos do arquivo serão guardados
numBytes é o tamanho da unidade a ser lida qtd é o número máximo de unidades a serem lidas pf é o arquivo do qual se deseja ler O retorno é o número de unidades efetivamente lidas Exemplo:
FILE *pf = fopen(“meuArquivo”, “r”);int mat[12];fread(mat, sizeof(int), 10, pf);
![Page 12: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/12.jpg)
fwrite int fwrite(void *buffer, int numBytes, int qtd, FILE *pf);
buffer é o local que contém os dados a serem gravados numBytes é o tamanho da unidade a ser gravada qtd é o número de unidades a serem gravadas pf é o arquivos do no qual se deseja gravar os dados O retorno é o número de unidades efetivamente gravadas Exemplo:
FILE *pf = fopen(“meuArquivo”, “w”);int mat[] = { 1, 2, 3, 4 };fwrite(mat, sizeof(int), 4, pf);
![Page 13: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/13.jpg)
ferror e perror int ferror(FILE *fp);
Retorna zero se não houver erros na última operação realizada com um arquivo
Caso contrário retorna não-zero
perror (char *mensagem) é usada em conjunto com ferror, e indica em que parte
do programa ocorreu um erro. Recebe como argumento uma string.
Exemplo:○ if(ferror(fp))
{perror("Erro na gravacao");exit(1);
}
![Page 14: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/14.jpg)
fseek int fseek(FILE *pf, long numBytes, int origem);
Move a posição corrente de leitura ou escrita em um arquivo
pf é o arquivo que se deseja percorrer numBytes é o número de bytes a serem movidos retorna 0 em caso de sucesso ou não-zero caso contrário. origem é o ponto de partida(geralmente usa-se as
macros abaixo):
Nome Val Significado
SEEK_SET 0 Inicio do arq.
SEEK_CUR 1 Ponto corrente
SEEK_END 2 Fim do arquivo
![Page 15: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/15.jpg)
rewind e remove void rewind(FILE *fp);
Move o cursor para o inicio do arquivoExemplo:
○ rewind(fp);
int remove(char *Arquivo);Apaga o arquivo que passamos o ponteiro.Retorna zero se ocorreu sucessoNão zero em caso de erroExemplo:
○ remove(“Arquivo.txt”);
![Page 16: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/16.jpg)
Verificando fim de arquivo
int feof(FILE *fp);Indica o fim de um arquivoRetorna não-zero se o arquivo chegou ao
fim e zero caso contrário
Outra maneira de verificar o término do arquivo é comparar um caractere lido com EOF.
![Page 17: Introdução à Programação Engenharia da Computação](https://reader036.fdocuments.net/reader036/viewer/2022082818/56813365550346895d9a7c50/html5/thumbnails/17.jpg)
Exercícios 1. Escreva um programa que leia do arquivo uma série de palavras e
diga qual a maior e a menor, além da quantidade de dígitos de cada. (veja a quantidade de palavras até o fim do arquivo)
2. O Grupo responsável por um dicionário está precisando ordenar as palavras. Mas eles possuem um arquivo com as palavras fora de ordem e pediu para vocês criarem um programa que gere, a partir desse, um arquivo com as palavras ordenadas.
3. Um grupo de matemáticos precisam de um programa que leia sequências de operadores (A B C L) de um arquivo BINÁRIO para fazer a seguinte operação:
( ( (A + (B x C ) ) + L) mod 26 ) + ‘a’ sendo A,B,C inteiros e L um char. Salve o resultado num arquivo Binário, na forma de caracteres. Depois de tudo, salve em outra linha do arquivo o tamanho da string gerada.