Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arquivo Texto Arquivo Texto vsvs BinárioBinário ARQUIVO TEXTO • dados: caracteres (1 byte (8 bits) cada) • organizado em linhas de tamanho variável• organizado em linhas, de tamanho variável ARQUIVO BINÁRIO • dados: estruturados e dados simples dados: estruturados e dados simples (cada elemento pode conter mais de 1 byte) • organizado em blocos, em bytes... COMPARAÇÃO: pegando-se um número inteiro (de 32 bits), com 88 dígitos... No arquivo texto terá:q sizeof(char)*88 = 64 bits No arquivo binário terá: sizeof(int) = 32 bits { do mesmo jeito que 1 está na memória! } Arquivo TextoArquivo Texto • elemento/posição corrente: linh- linha - caractere • marcador de final de linha:• marcador de final de linha: - uso pela linguagem C: “\n” - em Unix, Linux, AIX, Xenix, Mac OS X, BeOS, ...: LF (line feed) - em Commodore Apple II e até Mac OS 9: CR (carriage return)em Commodore, Apple II e até Mac OS 9: CR (carriage return) - em DOS, OS/2, Microsoft Windows: CR+LF Obs.: o sistema operacional converte o \n para seu padrão de fim de linha! • marcador de final de arquivo: - caractere EOF arqu.txt ⌫⌫ESTE EH UM TEXTO EXEMPLO EBLABLABLA ⌫⌫ ⌫⌫⌫⌫ 2 ⌫⌫ EOF FINAL DE LINHA Comandos de manipulaçãoComandos de manipulação fopen (<nome do arquivo>,<modo de abertura>) Nome do arquivo em disco “r” – abre um arquivo texto para leitura “w” – cria/recria um arquivo texto para escrita “a” – acrescenta ao fim de um arquivo texto existente Modo de abertura “r+” – abre um arquivo texto para leitura/escrita “w+” – cria/recria um arquivo texto para leitura/escrita “a+” – acrescenta em/cria um arquivo texto para leitura/escrita Abre/cria/recria um arquivo com o nome e modo passados. Obs.: a função retorna um apontador para uma estrutura FILE!Obs.: a função retorna um apontador para uma estrutura FILE! para leitura/escrita Ex:Ex: #include <stdio.h> /* contém definições e funções p/ uso e manipulação de streams */ #include <stdlib.h> void main(){ FILE *arq; /* declaração de arquivo*/ arq = fopen(“exemplo.txt”,”r”); /*abertura para leitura */q p ( p , ); / p / if (!arq) /* retorno NULL indica erro na abertura */ printf(“Erro na abertura do arquivo.”); } 3 fclose (<apontador para FILE>) F h d iFecha um stream de arquivo Obs.: ao fechar o stream do arquivo todos os dados que ainda estavam em buffer serão salvos em discoque ainda estavam em buffer serão salvos em disco. fflush (<apontador para FILE>) Descarrega o conteúdo em buffer para o arquivo sem fechar o stream putc (<caractere>,<FILE *>) Escreve um caractere no arquivoEscreve um caractere no arquivo getc (<FILE *>)getc (<FILE *>) Retorna um caracter lido do arquivo 4 Extração de elementos variados de linhas Extração de elementos variados de linhas de um arquivo de um arquivo txttxt Função fgets qq • Permite a leitura de uma linha do arquivo como string. • Formato: vetorchar: onde conteúdo da linha será armazenado – até o \n fgets(vetorchar, sizevetor, point_arq ); vetorchar onde conteúdo da l nha será armazenado até o \n sizevetor : número máximo de bytes em vetorchar point_arq : arquivo de onde será feito a leitura • Exemplo: fgets(buffertxt,MAX,arq); // string lida de arq é armazenada no vetor Extração de elementos de linhas de Extração de elementos de linhas de um arquivo texto um arquivo texto Função atoi • Transforma o conteúdo de um vetor de caracteres em inteiro• Transforma o conteúdo de um vetor de caracteres em inteiro. • Formato: atoi(vetorchar); vetorchar: conteúdo a ser convertido • Exemplo: ato (vetorchar); ... char str1[5]={"12"}; char str2[5]={'1','2'};[ ] { , } char str3[5]={'0'}; printf(" int 1 = %d",atoi(str1)); printf(" int 2 = %d",atoi(str2)); i tf(" i t 3 %d\ " t i( t 3))printf(" int 3 = %d\n",atoi(str3)); ... Extração de elementos de linhas Extração de elementos de linhas de um arquivo texto de um arquivo texto Função atof • Transforma o conteúdo de um vetor de caracteres em realTransforma o conteúdo de um vetor de caracteres em real. • Formato: atof(vetorchar); vetorchar: conteúdo a ser convertido • Exemplo: ( ) char str4[8]={"12.3674"}; char str5[5]={'.','1','2'}; char str6[5]={'0'};char str6[5]={ 0 }; printf(" int 4 = %f",atof(str4)); printf(" int 5 = %f",atof(str5)); printf(" int 6 = %f\n" atof(str6));printf( int 6 = %f\n ,atof(str6)); Extração de elementos variados de linhas Extração de elementos variados de linhas de um arquivo de um arquivo txttxt Função strtok • Extrai substrings (tokens) sucessivos de uma string, desde queg ( ) g, q separados por um separador diferente de branco. • Formato: • Exemplo: strtok(vetorchar,”símbolo_separador” ); // especifica o string inicial só na primeira extração: strcpy (sub1, strtok(buffertxt,”,”)); strcpy ( sub2 strtok(NULL ” ”)); • O nome do vetor é usado na função strtok apenas para extrair a strcpy ( sub2, strtok(NULL, , )); strcpy ( sub3, strtok(NULL,”,”)); f ç p p primeira substring. Para a extração das demais substrings de uma mesma string, deve-se usar a constante NULL como primeiro parâmetro das chamadas subsequentes de strtok ( enquanto a stringparâmetro das chamadas subsequentes de strtok ( enquanto a string base for a mesma, strtok segue avançando pelas posições da string ). Extração de elementos de linhas Extração de elementos de linhas de um arquivo texto de um arquivo texto Função strtokç • Formato: strtok(vetorchar,”símbolo_separador” ); vetorchar: conteúdo a ser analisado • Exemplo:char linha[36]={"parte1#outra parte#ultima parte#"}; p [ ] { p p p } printf("token 1 - %s\n", strtok(linha,"#")); //extrai primeira substring printf("token 2 - %s\n", strtok(NULL,"#")); //extrai próxima substring printf("token 3 - %s\n", strtok(NULL,"#")); //extrai próxima substring Extração de elementos variados de Extração de elementos variados de linhas de um arquivo linhas de um arquivo txttxt Exemplo, incluindo atoi e atof: num1 = atoi(strtok(buf,",")); strcpy(substring , strtok(NULL, “,”)); 2 t i( b t i 1)num2 = atoi(substring1); real1 = atof(strtok(buf,",")); strcpy(substring , strtok(NULL, “,”)); real2 = atof(substring1); Exemplo Exemplo 11 Desenvolver um programa em C contendo uma função void ConvertePontuacao( FILE *p_out, int vet_ptos[ ]), que abre “ ê éum arquivo texto “out.txt”, composto de sequências de até 3 dígitos numéricos sucedidos por um asterisco, sucessivamente (até encontrar EOF), e converte cada( ), sequência em um número inteiro, o qual é armazenado no vetor parâmetro (inserir -1 no elemento do vetor que sucede o último valor convertido, como sinalizador de elementoo último valor convertido, como sinalizador de elemento final), fecha o arquivo e devolve o vetor preenchido. Slide 11 // converte txt em vetor de inteiros: SOLUÇÃO 1 – lê caractere #include <stdlib.h> #include <stdio.h># nclude std o.h #include <string.h> FILE *p_out; void ConvertePontuacao( FILE *p_out, int vet_ptos[]) {{ char caractere= ‘ ‘, str_aux[4]; // armazena dígitos para conversão int i_vet=0, i_aux=0; while (caractere != EOF ) // foi inicializado com branco!w ( E F ) // f z m { caractere = getc(p_out); // lê caractere a caractere switch (caractere) {{ case '*' : ...... case EOF : break; próximo slide; default: ..... } }} vet_ptos[i_vet] = -1; // sinalizador de fim de valores convertidos } } // fim da função Slide 12 } ç ..... while (caractere != EOF ) // foi inicializado com branco! {{ caractere = getc(p_out); // lê caractere switch (caractere) { '*' // i di fi d ê i d úcase '*': // indica fim de sequência de números str_aux[i_aux] = '\0'; // insere finalizador de string printf("\nString gerado: %s",str_aux); vet ptos[i vet] = atoi(straux); //converte para inteirovet_ptos[i_vet] = atoi(str_aux); //converte para inteiro printf("\nNro convertido = %d",vet_ptos[i_vet]); i_aux = 0; // prepara para reiniciar o preenchimento i vet++; // posiciona no próximo elemento do vetor i_vet ; // posiciona no próximo elemento do vetor break; case EOF : break; default: str_aux[i_aux] = caractere; i_aux++; } } vet ptos[i vet] = 1; // sinalizador de fim de valores convertidosvet_ptos[i_vet] = -1; // sinalizador de fim de valores convertidos fclose (p_out); ...... Slide 13 // converte txt em vetor de inteiros: SOLUÇÃO 2 – lê linha #include <stdlib.h> #include <stdio.h># nclude std o.h #include <string.h> FILE *p_out; void ConvertePontuacao( FILE *p_out, int vet_ptos[]) {{ char stringao[256]; // armazena linha lida int i_vet=0, i_aux=0, cont_ast=0; if (fgets (stringao, sizeof(stringao), p out)== NULL)f (fg ( g , z f( g ), p_ u ) N LL) printf("\n Não leu nada!");// foi inicializado com branco! else {{ for (i_aux=0; i_aux< strlen(stringao); i_aux++) if (stringao[i_aux]=='*') // conta separadores da linha cont ast++;cont_ast++; vet_ptos[i_vet] = atoi(strtok(stringao,"*")); // extrai 1º número for (i_aux=1; i_aux< cont_ast; i_aux++) t t [i t] t i( t t k(NULL "*")) // t i tvet_ptos[i_vet] = atoi(strtok(NULL,"*")); // extrai os outros } vet_ptos[i_vet] = -1; // sinalizador de fim de valores convertidos } // fi d f ã Slide 14 } // fim da função int main() {{ int ptos[50], i_p=0; // vetor de pontuação e índice if ((p_out = fopen("out.txt", "r")) != NULL) { { ConvertePontuacao(p_out, ptos); fclose (p_out); printf("\n\nVetor resultante da conversao:\n"); printf( \n\nVetor resultante da conversao:\n ); while (ptos[i_p] != -1) { i tf(" %d " t [i ])printf(" %d ",ptos[i_p]); i_p++; } else printf ("\nNao encontrou o arquivo!\n") ; return 0; } Slide 15 Slide 16 Exemplo Exemplo 22 Desenvolver um programa em C contendo uma função void ConvertePontuacao( FILE *p_out, int vet_ptos[ ]), que abre “ l hum arquivo texto “textoout.txt”, composto de linhas com sequências de até 3 dígitos numéricos sucedidos por um asterisco, sucessivamente (até encontrar \n e EOF), e, ( ), converte cada sequência em um número inteiro, o qual é armazenado no vetor parâmetro (inserir -1 no elemento do vetor que sucede o último valor convertido, como sinalizadorvetor que sucede o último valor convertido, como sinalizador de elemento final), fecha o arquivo e devolve o vetor preenchido. Slide 17 // converte txt em vetor de inteiros: Solução lendo caractere a caractere #include <stdlib.h> #include <stdio.h># nclude std o.h #include <string.h> FILE *p_out; void ConvertePontuacao( FILE *p_out, int vet_ptos[]) {{ char caractere= ‘ ‘, str_aux[4]; // armazena dígitos para conversão int i_vet=0, i_aux=0; while (caractere != EOF ) // foi inicializado com branco!w ( E F ) // f z m { caractere = getc(p_out); // lê caractere a caractere switch (caractere) {{ case '*' : ...... case EOF : break; próximo slide;case ‘\n’: break; // ignora quebra de linha default: ..... } slide } } vet_ptos[i_vet] = -1; // sinalizador de fim de valores convertidos } Slide 18 } } // fim da função ..... while (caractere != EOF ) // foi inicializado com branco! {{ caractere = getc(p_out); // lê caractere switch (caractere) { '*' // i di fi d ê i d úcase '*': // indica fim de sequência de números str_aux[i_aux] = '\0'; // insere finalizador de string printf("\nString gerado: %s",str_aux); vet ptos[i vet] = atoi(str aux); //converte para inteirovet_ptos[i_vet] = atoi(str_aux); //converte para inteiro printf("\nNro convertido = %d",vet_ptos[i_vet]); i_aux = 0; // prepara para reiniciar o preenchimento i vet++; // posiciona no próximo elemento do vetor i_vet ; // posiciona no próximo elemento do vetor break; case EOF : break; case ‘\n’ : break; // ignora quebra de linha d f l g q default: str_aux[i_aux] = caractere; i_aux++; } }} vet_ptos[i_vet] = -1; // sinalizador de fim de valores convertidos fclose (p_out); Slide 19 ...... // converte txt em vetor de inteiros – Solução lendo linha #include <stdlib.h> #include <stdio.h> #include <string h>#include <string.h> FILE *p_out; void ConvertePontuacao( FILE *p_out, int vet_ptos[]) { char caractere = ' ' str aux[4]; // armazena dígitos para conversãochar caractere = , str_aux[4]; // armazena dígitos para conversão char buf_txt[256]; int i_vet=0, i_aux=0, i_t; while(! feof(p_out)) { ( (p )) { if (fgets(buf_txt,sizeof(buf_txt),p_out)== NULL) // lê linha printf("\nChegou ao fim do arquivo"); elseelse { for (i_t=0;i_t<strlen(buf_txt);i_t++) { switch (buf_txt[i_t]) { // ó i lid }{ ... // próximo slide } i_aux++; } i aux = 0; // prepara para reiniciar o preenchimentoi_aux 0; // prepara para reiniciar o preenchimento printf("\n"); } } vet ptos[i vet] 1; // sinalizador de fim de valores convertidos Slide 20 vet_ptos[i_vet] = -1; // sinalizador de fim de valores convertidos } // fim da função else { f ( l (b f ) ) for (i_t=0;i_t<strlen(buf_txt);i_t++) switch (buf_txt[i_t]) { '*' // d f d ê d úcase '*': // indica fim de sequência de números str_aux[i_aux] = '\0'; // insere finalizador de string printf("\nString gerado: %s",str_aux);p g g vet_ptos[i_vet] = atoi(str_aux); //converte printf("\nNro convertido = %d",vet_ptos[i_vet]); i aux = 0; // prepara para reiniciar o preenchimento_aux 0; // prepara para re n c ar o preench mento i_vet++; // posiciona no próximo elemento do vetor break; case EOF : break; case EOF : break; default: str_aux[i_aux] = buf_txt[i_t]); i_aux++; }} i_aux = 0; // prepara para reiniciar o preenchimento printf("\n"); Slide 21 p f( \ ); } ....... int main( )nt ma n( ) { int ptos[50], i_p=0; // vetor de pontuação e índice if ((p out = fopen("textoout txt" "r"))!= NULL)if ((p_out = fopen( textoout.txt , r ))!= NULL) { ConvertePontuacao(p_out, ptos); printf("\n\nVetor resultante da conversao:"); printf( \n\nVetor resultante da conversao: ); while (ptos[i_p] != -1) { i tf(" %d " t [i ])printf(" %d ",ptos[i_p]); i_p++; } fclose (p_out); } else printf ("\nNao encontrou o arquivo!\n") ; return 0; } Slide 22 } Slide 23 Extração de elementos de linhas de um Extração de elementos de linhas de um arquivo textoarquivo texto As informações armazenadas em um arquivo texto (portanto em representação caractere), separados entre si por delimitadores (tipicamente caracteres diferentes do espaço delimitadores (tipicamente caracteres diferentes do espaço, como vírgula, # ou /), podem ser extraídas e convertidas, se forem números, para a representação binária de inteiros ou ireais. Exemplos de possíveis conteúdos de arquivos texto: Exemplo1 (3 linhas): 2,Maria da Silva,8.4,5.7,8.8, Exemplos de possíveis conteúdos de arquivos texto: 5,José Ferreira,9.0,5.8,7.5, 14,Agnes Lindemann,8.5,7.0,6, Exemplo2 (3 linhas): 20#Ricardo Leão#8.4#5.7#8.8# 55#João Pedreira#9 0#5 8#7 5# Slide 24 55#João Pedreira#9.0#5.8#7.5# 67#Dagmar Scherer#8.5#7.0#6.0# Extração de elementos variados Extração de elementos variados de linhas de arquivo texto de linhas de arquivo texto Passos: 1 L t d li h d i t i (f ã 1. Ler toda a linha do arquivo como uma string (função fgets). 2 Ext i d st in lid s bst in s sp nd m 2. Extrair da string lida substrings que correspondam aos dados (função strtok). 3 Converter cada substring para o tipo de dado 3. Converter cada substring para o tipo de dado correspondente (funções atoi e atof). Exemplo Exemplo 33 Desenvolverum programa em C que leia um arquivo texto contendo nomes e notas, listando os conteúdos formatados e calculando a média das notas lidascalculando a média das notas lidas. O programa ao executar lê o arquivo dados, produzindo a saída: Slide 26 #include<stdio.h> # l d dl b h#include<stdlib.h> #include<string.h> // necessário para strtok( ) #define MAX 80 FILE *arq; FILE *arq; char opcao_menu( ) // menu com as operações { system("CLS"); printf("(L)istar notas\n");printf( (L)istar notas\n ); printf("(F)im \n"); printf(">"); return((getchar()));((g ())) } void listar_notas( ); int main() { // próximo slide int main() { { char op; op = opcao_menu( ); // função retorna a opção (char) f ( ' ') if (op =='L') { if (arq = fopen("dados.txt","r") == NULL) //abrir só para leitura( q p ( ) ) p printf("Erro ao abrir arquivo \n"); else {{ listar_notas( ); // chama listagem de notas fclose(arq); }} } printf("\nPrograma sera encerrado!\n”); return 0;return 0; } void listar_notas( ) { int num, notas; float n1,n2,media; h [21]char nome[21]; char buf[MAX]; // imprime cabeçalho printf("\n");printf( \n ); printf("NUM | NOME | N! | N2 \n"); printf("-----+--------------------------+-------+----------\n"); notas=0; di 0media=0; fgets(buf,MAX,arq); // lê string de até Max caracteres em buf while (!feof(arq)) // enquanto não for fim de arquivo....... { { num= atoi(strtok(buf,",")); // transforma string de buf em int strcpy(nome, strtok(NULL,",")); n1=atof( strtok(NULL,",")); // transforma string de buf em float 2 f( k(NULL " ")) n2=atof( strtok(NULL,",")); printf("%03d | %20s | %4.1f | %4.1f |\n",num, nome,n1,n2); notas = notas + 2; media =media + n1 + n2;media =media + n1 + n2; fgets(buf,MAX,arq); // lê próxima linha } printf("-----+----------------------------+-------+---------\n"); d d / p media=media/notas; printf("Media das notas = %4.1f\n", media); } ExecuçãoExecução:çç ExemploExemplo 44 Desenvolver um programa em C que: 1. crie um arquivo binário, através de uma função, contendo as. um qu , um fu ç , seguintes informações de produtos de uma quitanda: nome (string) valor (float)valor (float) comentário (string) 2. a seguir, baseado no conteúdo do arquivo acima e através de uma função gere um arquivo texto onde cada linha apresentauma função, gere um arquivo texto onde cada linha apresenta o número de ordem sequencial do produto correspondente no arquivo binário, seguido do contéudo do campo <nome>, hífen e conteúdo do campo <comentário>e conteúdo do campo <comentário>. 3. antes de encerrar, novamente através de função, imprima o arquivo texto gerado. 31 A execução do programa deve gerar o conteúdo da tela abaixo: 32 /* Gera um arquivo binário, com estruturas com informações de produtos de uma quitanda: nome do produto (string) valor (float) Exemplo 1 valor (float) comentario (string) Gera um arquivo texto em que cada linha inicia pelo número correspondente à seqüência do produto no arquivo, seguido do conteúdo do campo nome do d híf úd d á i */produto, hífen, e conteúdo do campo comentário. */ #include <stdio.h> #include <stdlib.h> #include <string h>#include <string.h> #define MAXNOME 31 #define MAXCOMENT 51 FILE *arqbin;FILE arqbin; FILE *arqtxt; struct prod { h [MAXNOME]char nome[MAXNOME]; float valor; char coment[MAXCOMENT]; }} int gravarqbin (FILE *, struct prod); //protótipos int gerarqtexto (FILE *, FILE *, struct prod); void listarqtexto(FILE *); Slide 33 void listarqtexto(FILE ); ... int gravarqbin (FILE *, struct prod); //protótipos int gerarqtexto (FILE *, FILE *, struct prod); id li t t t (FILE *) Exemplo 1 void listarqtexto(FILE *); void le_texto (char texto[ ], int size_texto) // string: ponteiro implícito { char dummy[size texto + 1]; // com um caractere a mais do que o textochar dummy[size_texto + 1]; // com um caractere a mais do que o texto fflush(stdin); fgets(dummy, sizeof(dummy), stdin); // lê caracteres // O último caractere tem que ser '\n' para estar correto:// O último caractere tem que ser \n para estar correto while(dummy[strlen(dummy) -1] != '\n') { printf("\n Numero de caracteres digitados maior que previsto. " ); i f(“\ N i i h %d " i 1)printf(“\n Numero maximo aceito eh %d.", size_texto - 1); printf(“\n Digite o conteudo novamente.\n"); fflush(stdin); fgets(dummy sizeof(dummy) stdin); // lê caracteres novamentefgets(dummy, sizeof(dummy), stdin); // lê caracteres novamente } dummy[strlen(dummy) - 1]= '\0'; // sempre precisa substituir o '\n' strcpy(texto dummy); // transfere conteúdo digitado sem o '\n‘strcpy(texto, dummy); // transfere conteúdo digitado sem o \n } Slide 34 ... int main ( ) { Gravação do arquivo binário{ int cont_reg; // retornado pela função, informa nro de registros gravados struct prod produto; // var buffer globalp p g if ((arqbin = fopen("c:\\prod.bin" , "wb")) == NULL) printf("\nErro abertura arquivo binario - criacao\n\n"); else {{ cont_reg = gravarqbin (arqbin, produto); printf("\nProdutos gravados = %d\n\n", cont_reg) ; fclose(arqbin);fclose(arqbin); if (cont_reg < 1) printf(“\nArquivo binário está vazio! "); else if ((arqbin = fopen("c:\\prod.bin" , "rb")) == NULL) printf("\nErro abertura arquivo binario - leitura\n\n"); else if (( t t f (" \\ d t t" " ")) NULL)if ((arqtxt = fopen("c:\\prod.txt" , "w")) == NULL) printf("\nErro abertura arquivo texto - criacao\n\n"); else { Slide 35 { // próximo slide ... l Gravação do arquivo textoelse { printf("\nLinhas escritas no arquivo texto = %d\n\n", gerarqtexto (arqbin arqtxt produto); arquivo texto gerarqtexto (arqbin, arqtxt, produto); fclose(arqtxt); fclose(arqbin); if ((arqtxt = fopen("c:\\prod txt" "r")) == NULL)if ((arqtxt fopen( c:\\prod.txt , r )) NULL) printf("\nErro abertura arquivo texto - leitura\n\n"); else { Listagem do arquivo texto listarqtexto(arqtxt); printf("\nPrograma concluído com sucesso!\n\n”); fclose(arqtxt); }} } } return 0;return 0; } // funções nos próximos slides Slide 36 // criação do arquivo binário, retornando número de registros gravados: int gravarqbin (FILE * arqb struct prod produt)int gravarqbin (FILE arqb, struct prod produt) { int contgrav = 0, op; do { // leitura dos campos, com consistência printf("\nNome do produto com ate %d caracteres: ", MAXNOME); le texto(produt nome sizeof product nome); // lê e exclui \nle_texto(produt.nome,sizeof product.nome); // lê e exclui \n do { printf("\nValor do produto: "); % Gravação no arquivo p ( p ) scanf("%f", &produt.valor); } while (produt.valor <= 0); printf("\nComentario com ate %d caracteres: ", MAXCOMENT); le texto(produt coment sizeof produt coment); arquivo binário le_texto(produt.coment, sizeof produt.coment); fwrite(&produt, sizeof(prod), 1, arqb); contgrav++; // conta registros gravados printf("\n1 - NovoProduto; 0 - EncerrarInclusao\n"); f("%d" ) p ( ) scanf("%d", &op); } while (op); return contgrav; // retorna número de registros gravados } Slide 37 } ... // conversão para arquivo texto int gerarqtexto (FILE * arqbin FILE *arqt struct prod produt)int gerarqtexto (FILE arqbin, FILE arqt, struct prod produt) { int cont = 1; while (!(feof(arqbin))) Gravação em arquivo texto f i tf ( ( ( q ))) if (fread(&produt, sizeof(prod), 1, arqbin) == 1) { // imprime txt, inserindo caracteres adicionais no fprintf: f i tf( t " d t %d % % \ " t d t com fprintf fprintf(arqt, "produto %d : %s - %s\n", cont, produt.nome, produt.coment); cont++;} } return cont-1; // retorna número de linhas gravadas } void listarqtexto(FILE *arqt) // impressão caractere à caractereq ( q ) mp { char caract; while (!feof(arqt)) i tf ("% " t ( t))printf ("%c", getc(arqt)); } Slide 38
Compartilhar