Buscar

Programação Estruturada parte 10

Prévia do material em texto

Programação Estruturada
Prof.ª: Priscilla Abreu
pbraz@unicarioca.edu.br
Disciplina – Programação Estruturada
Roteiro de aula:
• Objetivo da aula
– Resolução dos exercícios – Arquivo Texto
– Arquivos
• Manipulação de arquivos binários
• Acesso aleatório a arquivos
• Exercícios
2Algoritmos II
RESOLUÇÃO DE EXERCÍCIOS
3Programação Estruturada
Exercício
1) Faça um programa que armazene em um arquivo
denominado raizQuadrada.txt uma tabela de raízes
quadradas dos cem primeiros inteiros positivos.
4Programação Estruturada
Resolução – Exercício 1
#include <stdio.h>
#include <math.h>
int main(){
FILE *ptArq;
float raiz;
int i;
ptArq = fopen("raizQuadrada.txt", "w");
5Programação Estruturada
Resolução – Exercício 1
if (ptArq != NULL)
printf("Arquivo criado com sucesso!");
else{
printf("Arquivo não foi criado!");
exit(0);
}
6Programação Estruturada
Resolução – Exercício 1
for (i=1; i<=100;i++){
fprintf(ptArq, "%f\n", sqrt(i));
}
printf("\n Fechando o arquivo...");
fclose(ptArq);
}
7Programação Estruturada
MANIPULAÇÃO DE ARQUIVOS
8Programação Estruturada
Arquivo texto
Arquivos texto são mais simples de serem manipulados
e permitem fácil acesso ao seu conteúdo. Mas possuem
as seguintes desvantagens:
– O acesso aos elementos é sequencial;
– Ocupam mais espaço que arquivos binários.
9Programação Estruturada
Arquivo binário
Arquivos binários têm seu conteúdo armazenado
no formato binário e, por isso, ocupam menos
bytes que os arquivos textos. Além disso, não
precisam de separadores entre os campos nem
entre os registros.
Em geral, utilizam a extensão “.dat” ou “.bin”.
10Programação Estruturada
Manipulação de dados em um arquivo binário
Acesso e manipulação de arquivos por meio de:
̶ Leitura e gravação de blocos de informações
estruturadas
̶ Dados são lidos e gravados em blocos, normalmente oriundos de
estruturas, vetores e matrizes;
̶ Funções:
̶ fread(endereco, tamanho, quantidade, ponteiro_arquivo) =>
leitura de bloco;
̶ fwrite(endereco, tamanho, quantidade, ponteiro_arquivo) =>
gravação de bloco.
11Programação Estruturada
Manipulação de dados em um arquivo binário
Gravando blocos de dados em um arquivo
̶ Função fwrite()
̶ Grava um bloco de informações em um arquivo binário.
̶ Necessidade de passar o endereço da variável e não apenas a
variável.
̶ Sintaxe:
̶ fwrite(endereco, tamanho, quantidade, ponteiro)
̶ Exemplo: fwrite(ch, sizeof(char), 20, ptArq);
Onde: char ch[20];
12Programação Estruturada
Manipulação de dados em um arquivo binário
#include <stdio.h>
#include <stdlib.h>
int main (){
int valor [20]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
char ch[20]= "Teste geral";
FILE *ptarq = fopen( "binario.dat" , "wb"); // escrita em modo binário
if ( ptarq == NULL )
{
printf ("O arquivo não pôde ser aberto ");
return 1;
}
fwrite (ch , sizeof (char), 20, ptarq);
fwrite (valor , sizeof (int), 20, ptarq);
fclose(ptarq );
}
13Programação Estruturada
Manipulação de dados em um arquivo binário
Lendo blocos de dados de um arquivo
̶ Função fread()
̶ Faz a leitura de um bloco de informações de um arquivo binário
para uma variável do programa.
̶ Sintaxe:
̶ fread(endereco, tamanho, quantidade, ponteiro)
̶ Exemplo: fread(ch, sizeof(ch), 1, ptArq);
Onde: char ch[20];
14Programação Estruturada
Manipulação de dados em um arquivo binário
#include <stdio.h>
#include <stdlib.h>
int main (){
int i, valor [20];
char ch[20];
FILE *ptarq = fopen( "binario.dat" , "rb"); // leitura em modo binário
if ( ptarq == NULL ) {
printf ("O arquivo não pôde ser aberto ");
return 1;
}
fread (ch , sizeof (ch), 1, ptarq );
fread(valor , sizeof (valor), 1, ptarq );
printf("%s\n",ch);
for (i=0;i<20;i++)
printf("%d ",valor[i]);
fclose(ptarq );
}
15Programação Estruturada
Manipulação de dados em um arquivo binário
̶ Uma das principais aplicações destas funções é a leitura e
escrita de estruturas criadas pelos usuários. A gravação em
binário da estrutura permite que o programador ao escrever ou
ler do arquivo se preocupe somente com a estrutura como um
todo e não com cada elemento que a compõe.
̶ Exemplo:
typedef struct _PESSOA{
char nome [40]; int ano;
} PESSOA;
FILE *pa;
PESSOA p;
...
fwrite(&p, sizeof ( PESSOA), 1, pa); //comando de escrita
16Programação Estruturada
Manipulação de dados em um arquivo binário
#include <stdio.h>
#include <stdlib.h>
typedef struct _PESSOA{
char nome [40]; int ano;
} PESSOA;
int main (){
FILE *pa;
PESSOA p;
pa = fopen( "binario3.dat" , "wb"); // leitura em modo binário
if ( pa == NULL ) {
printf ("O arquivo não pôde ser aberto ");
return 1;
}
17Programação Estruturada
Manipulação de dados em um arquivo binário
printf("Nome: "); gets(p.nome);
printf("Ano: "); scanf("%d",&p.ano);
fwrite(&p, sizeof ( PESSOA), 1, pa);
fclose(pa);
pa = fopen( "binario3.dat" , "rb"); // leitura em modo binário
if ( pa == NULL ) {
printf ("O arquivo não pôde ser aberto ");
return 1;
}
fread (&p , sizeof (PESSOA), 1, pa );
printf("Nome: %s\n",p.nome);
printf("Ano: %d\n",p.ano);
fclose(pa);
}
18Programação Estruturada
Exercício
1) Faça um programa que leia as notas de 30 alunos de
uma turma e armazene as notas em um arquivo
binário. Após o armazenamento das notas no arquivo,
você deve fechar o arquivo. Abra o arquivo novamente
para ler todas as notas armazenadas e calcular média
da turma e exibir o resultado.
19Programação Estruturada
ACESSO ALEATÓRIO A ARQUIVOS
20Programação Estruturada
Acesso aleatório a arquivos
Todo arquivo aberto tem, associado a ele, um ponteiro
para a posição atual do arquivo. Esse ponteiro é o que
fornece a localização do próximo byte a ser lido ou
escrito.
Até o momento desenvolvemos arquivos que são
acessados de forma sequencial.
Através do acesso aleatório, podemos acessar e transferir
dados de qualquer posição do arquivo.
Para isso utilizamos a função fseek(), para modificar a
posição atual do ponteiro no arquivo.
21Programação Estruturada
Acesso aleatório a arquivos
Função que permite posicionar o ponteiro em um ponto
específico do arquivo;
̶ Sintaxe:
̶ fseek(ponteiro, qtdbytes, origem);
Onde:
ponteiro – ponteiro responsável pela manipulação;
qtdbytes – deslocamento do ponteiro em bytes;
origem – Origem do deslocamento, a partir de onde começará o
deslocamento.
SEEK_END -> indica o final do arquivo;
SEEK_CUR -> posição atual do arquivo;
SEEK_SET -> posição inicial do arquivo.
A função retorna 0 se a operação obtiver sucesso.
22Programação Estruturada
Acesso aleatório a arquivos
̶ Exemplos:
̶ fseek(ptarq, 0, SEEK_SET);
̶ fseek(ptarq, 100, SEEK_SET); // posiciona o ponteiro 100
bytes à direita do início do arquivo
̶ fseek(ptarq, 15, SEEK_CUR); // posiciona o ponteiro 15
bytes a partir da posição atual
23Programação Estruturada
Acesso aleatório a arquivos
̶ Exemplo:
#include <stdio.h>
#include <stdlib.h>
int main (){
float media=0, notas[30];
int i;
FILE *ptarq = fopen( "binario.dat" , "r+b"); // leitura e escrita em
modo binário
if ( ptarq == NULL ) {
printf ("O arquivo não pôde ser aberto ");
return 1;
}
24Programação Estruturada
Acesso aleatório a arquivos
for (i=0;i<30;i++){
printf("Informe uma nota: ");
scanf("%f",&notas[i]);
}
fwrite (notas, sizeof (notas), 1, ptarq );
fseek(ptarq,0,SEEK_SET);
fread(notas,sizeof(notas),1, ptarq);
for (i=0;i<30;i++){
media+=notas[i];
}
media/=30;
printf("\nMédia: %.1f",media);
fclose(ptarq);
}
25Programação Estruturada
A função REWIND()
̶ Posicionamento do ponteiro no início do arquivo;
̶ Função utilizada:
void rewind (FILE *parq);
̶ Arquivo deve estar aberto com um modo que
permita a execução das operações desejadas;
̶ Exemplo: em um arquivo aberto somente para
escrita, ao posicionar o cursor novamente no início,
não irá permitir outra operação que não seja escrita.
26Programação Estruturada
A função FEOF()
̶ Indica se um arquivo chegou ao seu final;
̶ Pode ser utilizada tanto em arquivos texto quanto
binários;
̶ EOF => valor que indicao fim do arquivo;
̶ Função utilizada:
int feof (FILE *parq);
̶ Exemplo:
while (!feof(ptarq))
fread(&p, sizeof(pessoa), 1,ptarq);
27Programação Estruturada
Renomeando arquivos
̶ Função para renomear um arquivo.
̶ Sintaxe:
̶ rename("arquivo_antigo", "arquivo_novo");
̶ Exemplo:
if (rename("teste.txt", "teste2.txt") == 0)
printf("Arquivo foi renomeado com sucesso!!! ");
else
printf("Erro para renomear o arquivo!");
28Programação Estruturada
Excluindo arquivos
̶ Função que remove um arquivo e retorna zero(0) se
a operação for realizada com sucesso.
̶ Sintaxe:
̶ remove(arquivo);
̶ Exemplo:
if (remove("teste.txt")==0)
printf("Arquivo removido! ");
else
printf("Arquivo não foi removido! ");
29Programação Estruturada
DÚVIDAS ?
30Programação Estruturada
Exercício
1) Faça um programa que armazene em um arquivo
binário os dados de 10 funcionários de uma loja. Utilize
uma estrutura para representar os dados desses
funcionários, contendo código, nome, cpf, sexo e
salário. Ao final da gravação no arquivo, volte ao seu
início e imprima as informações gravadas através do
acesso ao arquivo.
2) Complemente o exercício anterior apresentando ao
final da impressão dos dados gravados, as informações
do funcionário com maior salário.
31Programação Estruturada

Continue navegando