Carregar apresentação
A apresentação está carregando. Por favor, espere
1
LINGUAGEM DE PROGRAMAÇÃO I
Aula 10- Armazenando para preservar - 2a parte
2
Atenção aos Temas Principais dessa Aula
3
Conteúdo Programático desta aula
Conhecer e usar as funções rewind(), fread(), fwrite(), fgetpos(), fsetpos(), fseek(), ftell(), rename(), remove(), rewind(); Analisar trechos de gravação, leitura e exclusão em arquivos no modo binário.
4
Direto ao Assunto
5
TRABALHANDO COM ARQUIVO BINÁRIO
6
Funções de leitura e gravação em arquivos binários
7
Funções de leitura e gravação em arquivos binários
8
Funções de leitura e gravação em arquivos binários
9
Funções de leitura e gravação em arquivos binários
fread(vetor, sizeof(tipo), tamanho, arqPtr); fread(vetor, sizeof(vetor), 1, arqPtr); fwrite(&var, sizeof(tipo/var), 1, arqPtr);
10
endereço elemento é um ponteiro para qualquer tipo que localiza a posição na MP onde deverá ser armazenado o elemento que foi lido, ou onde será gravado, do/no arquivo externo tamanho número de bytes do que vai ser lido, fornecido pela função sizeof (argumento) , sendo o argumento o tipo do elemento, ou o nome do elemento quantidade indica o total de itens lidos, onde cada item tem seu tamanho especificado no parâmetro tamanho ptrArq variável ponteiro de arquivo que aponta para o arquivo externo
11
Exemplo de um programa com menu, matrizes bidimensionais e arquivo binário
12
#include <stdio.h>
#include <stdlib.h> int main() { int op,x,y, flag1=0, flag2=0, flag3=0, flag4=0; float mat[3][5],somaLinha[3], somaColuna[5]; FILE *arq; do { system("cls"); printf("\nMenu Matriz\n"); printf("\n1-le do teclado"); printf("\n2-le do arquivo"); printf("\n3-soma Linha"); printf("\n4-soma Coluna"); printf("\n5-exibe na tela"); printf("\n6-grava no arquivo"); printf("\n7-sai"); printf("\nOpcao: "); scanf("%d",&op);fgetc(stdin); system("cls");
13
#include <stdio.h>
#include <stdlib.h> int main() { int op,x,y, flag1=0, flag3=0, flag4=0; float mat[3][5],somaLinha[3], somaColuna[5]; FILE *arq; do { system("cls"); printf("\nMenu Matriz\n"); printf("\n1-le do teclado"); printf("\n2-le do arquivo"); printf("\n3-soma Linha"); printf("\n4-soma Coluna"); printf("\n5-exibe na tela"); printf("\n6-grava no arquivo"); printf("\n7-sai"); printf("\nOpcao: "); scanf("%d",&op);fgetc(stdin); system("cls");
14
switch(op) { case 1: for(x=0;x<3;x++) for(y=0;y<5;y++) printf("\n%d,%d-> ",x+1,y+1); scanf("%f",&mat[x][y]); } flag1=1; flag3=0; flag4=0; break;
15
switch(op) { case 1: for(x=0;x<3;x++) for(y=0;y<5;y++) printf("\n%d,%d-> ",x+1,y+1); scanf("%f",&mat[x][y]); } flag1=1; flag3=0; flag4=0; break; case 3: if(flag1==1 ) printf("\nGerando Soma Linha\n"); { somaLin[x]=0; somaLin[x]+= mat[x][y]; printf("\nSoma Linha Gerada\n"); flag3=1; else printf("\nEntre primeiro com os dados\n");
16
Opção 1 Opção 3
17
case 2: arq=fopen("Matriz","rb"); if(arq==NULL) printf("\nArquivo não abriu \n"); else { printf("\nAguarde. Lendo!\n"); fread(mat,sizeof(mat),1,arq); fread(somaLin,sizeof(somaLin),1,arq); fread(somaCol,sizeof(somaCol),1,arq); fclose(arq); printf("\nAs tres matrizes lidas\n"); flag1=1;flag3=1; flag4=1; } break;
18
Opção 2
19
case 5: if(flag3==1 && flag4==1) { printf("\n\n\t\tMatriz \t\t\t\tSomaLinha\n\n"); for(x=0;x<3;x++) { for(y=0;y<5;y++) printf("%7.3f\t",mat[x][y]); printf("\t%7.3f\n",somaLin[x]); } printf("\n\n"); printf("%7.3f\t",somaCol[y]); printf("\n\t\tSomaColuna\n"); else printf("\nEntre primeiro com os dados ou gere as outras matrizes\n"); break;
20
Opção 5
21
if(flag1==1 && flag3==1 && flag4==1) { arq=fopen("Matriz","wb");
case 6: if(flag1==1 && flag3==1 && flag4==1) { arq=fopen("Matriz","wb"); if(arq==NULL) printf("\nArquivo não pode ser lido\n"); else { printf("\nAguarde. Gravando!\n"); fwrite(mat,sizeof(mat),1,arq); fwrite(somaLin,sizeof(somaLin),1,arq); fwrite(somaCol,sizeof(somaCol),1,arq); fclose(arq); printf("\nAs tres matrizes gravadas\n"); } else printf("\nEntre primeiro com os dados ou gere as outras matrizes\n"); break;
22
Opção 6
23
} /*fecha switch*/ case 4: case 7: if(flag1==1)
printf("\nObrigada por usar meu programa. Autor: \n"); break; default: printf("\nIndisponivel\n"); } /*fecha switch*/ printf("\n\n");system("pause"); }while(op!=7); } case 4: if(flag1==1) { printf("\nGerando Soma Coluna\n"); for(y=0;y<5;y++) { somaCol[y]=0; for(x=0;x<3;x++) somaCol[y]+= mat[x][y]; printf("\nSoma Coluna Gerada\n"); flag4=1; else printf("\nEntre primeiro com os dados\n");
24
Opção 4 Opção 7
25
Função de localização e posicionamento
26
Função de localização e posicionamento
Função que retorna a posição corrente
27
Função de localização e posicionamento
Função que retorna a posição corrente
28
Função de localização e posicionamento
Função que retorna a posição corrente
29
Função de localização e posicionamento
30
Função de localização e posicionamento
Função que desloca o indicador de posição de arquivo para uma determinada posição Função de localização e posicionamento
31
Função de localização e posicionamento
Função que desloca o indicador de posição de arquivo para uma determinada posição Função de localização e posicionamento
32
gravarFtellFseek #include <stdio.h> #include <stdlib.h>
int main() { float valor; FILE *arq; if((arq=fopen("valores", "ab"))==NULL) printf("\nArquivo nao pode ser aberto\n"); else printf("\nValor ou 0: "); scanf("%f", &valor); while(valor != 0 ) fwrite(&valor ,sizeof(valor),1,arq); printf("\nValor ou 0: "); scanf("%f", &valor); } fclose(arq); printf("\n\n"); system("pause"); gravarFtellFseek
33
ler-gravarFtellFseek
#include <stdio.h> #include <stdlib.h> int main() { float valor, valorT; long int pos1; FILE *arq; if((arq=fopen("valores", "rb+"))==NULL) printf("\nArquivo nao pode ser aberto\n"); else printf("\nValores armazenados\n"); pos1=ftell(arq);fread(&valor, sizeof(valor),1,arq); while(!feof(arq) ) printf("\n\nPosicao atual: %ld",pos1 ); printf("\tValor: %7.2f",valor ); pos1=ftell(arq); fread(&valor, sizeof(valor),1,arq); } ler-gravarFtellFseek
34
ler-gravarFtellFseek
pos1=4; valorT=1515; fseek(arq,pos1, SEEK_SET); fwrite(&valorT,sizeof(valorT), 1, arq); fseek(arq, pos1, SEEK_SET); fread(&valor, sizeof(valor),1,arq); printf("\n\nApos Alteracao\nPosicao atual: %ld",pos1 ); printf("\tValor: %7.2f",valor ); fclose(arq); } printf("\n\n"); system("pause"); ler-gravarFtellFseek
35
Função de localização e posicionamento
36
Função função seta o indicador de posição do arquivo no início
Função de localização e posicionamento
37
Função de localização e posicionamento
Função função seta o indicador de posição do arquivo no início
38
Função de localização e posicionamento
39
Função de localização e posicionamento
Função que obtém a posição atual no fluxo, armazenando-a no objeto apontado por pos Função de localização e posicionamento
40
Função de localização e posicionamento
Função que obtém a posição atual no fluxo, armazenando-a no objeto apontado por pos Função de localização e posicionamento
41
Função de localização e posicionamento
42
Função de localização e posicionamento
Função que ajusta o indicador de posição de arquivo para o lugar sinalizado na variável pos Função de localização e posicionamento
43
Função de localização e posicionamento
Função que ajusta o indicador de posição de arquivo para o lugar sinalizado na variável pos Função de localização e posicionamento
44
gravarFgetpos #include <stdio.h> #include <stdlib.h>
int main() { float valor; FILE *arq; if((arq=fopen("valores", "ab"))==NULL) printf("\nArquivo nao pode ser aberto\n"); else printf("\nValor ou 0: "); scanf("%f", &valor); while(valor != 0 ) fwrite(&valor ,sizeof(valor),1,arq); printf("\nValor ou 0: "); scanf("%f", &valor); } fclose(arq); printf("\n\n"); system("pause"); gravarFgetpos
45
ler-gravarFgetposFsetpos
#include <stdio.h> #include <stdlib.h> int main() { float valor, valorT; fpos_t pos1; FILE *arq; if((arq=fopen("valores", "rb+"))==NULL) printf("\nArquivo nao pode ser aberto\n"); else printf("\nValores armazenados\n"); fgetpos(arq, &pos1);fread(&valor, sizeof(valor),1,arq); while(!feof(arq) ) printf("\n\nPosicao atual: %ld",pos1 ); printf("\tValor: %9.2f",valor ); fgetpos(arq, &pos1); fread(&valor, sizeof(valor),1,arq); } ler-gravarFgetposFsetpos
46
ler-gravarFgetposFsetpos
valorT=1515; fsetpos(arq, &pos1); fwrite(&valorT,sizeof(valorT), 1, arq); fread(&valor, sizeof(valor),1,arq); printf("\n\nApos Alteracao\nPosicao atual: %ld",pos1 ); printf("\tValor: %9.2f",valor ); fclose(arq); } printf("\n\n");system("pause"); ler-gravarFgetposFsetpos
47
Outras funções
48
Função que apaga o arquivo especificado
Outras funções Função que apaga o arquivo especificado
49
Função que apaga o arquivo especificado
Outras funções Função que apaga o arquivo especificado
50
Função que renomeia o arquivo especificado .
Outras funções Função que renomeia o arquivo especificado . Função que apaga o arquivo especificado
51
Função que renomeia o arquivo especificado .
Outras funções Função que renomeia o arquivo especificado . Função que apaga o arquivo especificado
52
O exemplo do funcionário – Trecho Excluir
53
else { printf("\nROTINA DE EXCLUSAO\n"); arq2=fopen("TEMP","wb"); if(arq2==NULL) { printf("\nArquivo nao pode ser aberto\n"); fclose(arq); } { /*pos1 recebeu valor no trecho de busca acima*/ fsetpos(arq,&pos1); fread(&mat,tam,1,arq); fread(&salario,tam2,1,arq); printf("\nMatricula: %5d\tSalario: R$ %9.2f",mat,salario); printf("\nExclui este registro(s/n): "); fgetc(stdin);scanf("%c",&ch); if(toupper(ch)=='S') auxI=mat; auxR=salario; rewind(arq); Funcionário
54
fread(&mat,tam,1,arq); while( !feof(arq)) { fread(&salario,tam2,1,arq); if(mat != auxI) fwrite(&mat,tam,1,arq2); fwrite(&salario, tam2, 1, arq2); } fclose(arq); fclose(arq2); remove("funcionarios"); rename("TEMP","funcionarios"); else { fclose(arq); fclose(arq2); } Funcionário
55
Vamos ao Bate Pronto
56
1) Qual a função que retorna a posição corrente no fluxo expressa sob o número de bytes a partir do início para arquivo binário ?
57
R: ftell() 1) Qual a função que retorna a posição corrente no fluxo expressa sob o número de bytes a partir do início para arquivo binário ?
58
2) Qual função que grava no arquivo?
R: ftell() 1) Qual a função que retorna a posição corrente no fluxo expressa sob o número de bytes a partir do início para arquivo binário ?
59
R: fwrite() 2) Qual função que grava no arquivo? R: ftell() 1) Qual a função que retorna a posição corrente no fluxo expressa sob o número de bytes a partir do início para arquivo binário ?
60
3) Qual a função que lê do arquivo?
R: fwrite() 2) Qual função que grava no arquivo? R: ftell() 1) Qual a função que retorna a posição corrente no fluxo expressa sob o número de bytes a partir do início para arquivo binário ?
61
R: fread() 3) Qual a função que lê do arquivo? R: fwrite() 2) Qual função que grava no arquivo? R: ftell() 1) Qual a função que retorna a posição corrente no fluxo expressa sob o número de bytes a partir do início para arquivo binário ?
62
4) Qual a função que pode substituir rewind(arqPtr); ?
63
R: fseek(arqPtr, 0, SEEK_END);
4) Qual a função que pode substituir rewind(arqPtr); ?
64
R: fseek(arqPtr, 0, SEEK_END);
5) Com a função fgetpos(), conseguimos obter a posição atual do fluxo e, com função fsetpos(), posicionar o cursor no local desejado. Que outras funções poderiam fazer essas ações ? 4) Qual a função que pode substituir rewind(arqPtr); ?
65
R: ftell() e fseek() R: fseek(arqPtr, 0, SEEK_END); 5) Com a função fgetpos(), conseguimos obter a posição atual do fluxo e, com função fsetpos(), posicionar o cursor no local desejado. Que outras funções poderiam fazer essas ações ? 4) Qual a função que pode substituir rewind(arqPtr); ?
66
Resumindo
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.