xandyrj Postado Dezembro 12, 2012 Denunciar Share Postado Dezembro 12, 2012 Fazer um programa que lê um arquivo de dados, com registros de tamanho fixo e gera outro, intercalando o primeiro com o "metade + 1", o segundo com o "metade +2", o terceiro com o "metade + 3", ....Exemplo: Dado um arquivo de entrada com o conteúdo: 00001000020000300004000050000600007000080000900010 O arquivo de saída deverá ficar: 00001000060000200007000030000800004000090000500010 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 xandyrj Postado Dezembro 17, 2012 Autor Denunciar Share Postado Dezembro 17, 2012 #include <string.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> #define TAMMAXREG 500000 int main(void) { FILE *fp,*fb; char *string; int tamreg, tamarq; /* abrir o arquivo */ fp = fopen("DEMO.DAT", "r+b"); if (fp == NULL) { printf("\nERRO na abertura do arquivo.\n"); exit(1); } /* ler a string */ if (fgets(string, TAMMAXREG, fp) == NULL) { printf("\nERRO na leitura do arquivo.\n"); exit(1); } tamreg = strlen(string); if (fseek(fp, 0, SEEK_END) != 0) { printf("\nERRO no fseek.\n"); exit(1); } tamarq= ftell(fp); if (tamarq == -1) { printf("\nERRO no ftell.\n"); exit(1); } fb = fopen ("teste.saida","w+"); if (fb==NULL) { printf("\nERRO no arquivo de saida.\n"); exit(1); } if (fseek(fp,0,SEEK_SET) != 0); { printf("\nERRO no fseek.\n"); exit(1); } /* display the string */ printf("tamreg = %d\n", tamreg); printf("registro = %s\n", string); printf("tamarq = %d\n", tamarq); fclose(fp); getch(); }Porém ele ainda não está completo,agora tenho que saber como fazer para ler o primeiro registro e grava-lo no arquivo de saida Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 xandyrj Postado Dezembro 18, 2012 Autor Denunciar Share Postado Dezembro 18, 2012 #include <string.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>#define TAMMAXREG 500000int main(void){ FILE *fp,*fb; char string [512]; int tamreg, tamarq; /* abrir o arquivo */ fp = fopen("DEMO.DAT", "r+b"); if (fp == NULL) { printf("\nERRO na abertura do arquivo.\n"); exit(1); } /* ler a string */ if (fgets(string, TAMMAXREG, fp) == NULL) { printf("\nERRO na leitura do arquivo.\n"); exit(1); } tamreg = strlen(string); if (fseek(fp, 0, SEEK_END) != 0) { printf("\nERRO no fseek.\n"); exit(1); } tamarq= ftell(fp); if (tamarq == -1) { printf("\nERRO no ftell.\n"); exit(1); } fb = fopen ("teste.saida","w+b"); if (fb==NULL) { printf("\nERRO no arquivo de saida.\n"); exit(1); } if (fseek(fp, 0, SEEK_SET) != 0) { printf("\nERRO no fseek.\n"); exit(1); } if (fread(string,1,tamreg,fp)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fwrite(string,1,tamreg,fb)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fseek(fp,5*tamreg,SEEK_SET)!=0) { printf("\nERRO no fseek.\n"); exit(1); } if (fread (string,1,tamreg,fp)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fwrite(string,1,tamreg,fb)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fseek(fp,1*tamreg,SEEK_SET)!=0) { printf("\nERRO no fseek.\n"); exit(1); } if (fread (string,1,tamreg,fp)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fwrite(string,1,tamreg,fb)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fseek(fp,6*tamreg,SEEK_SET)!=0) { printf("\nERRO no fseek.\n"); exit(1); } if (fread (string,1,tamreg,fp)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fwrite(string,1,tamreg,fb)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fseek(fp,2*tamreg,SEEK_SET)!=0) { printf("\nERRO no fseek.\n"); exit(1); } if (fread (string,1,tamreg,fp)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fwrite(string,1,tamreg,fb)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fseek(fp,7*tamreg,SEEK_SET)!=0) { printf("\nERRO no fseek.\n"); exit(1); } if (fread (string,1,tamreg,fp)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fwrite(string,1,tamreg,fb)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fseek(fp,3*tamreg,SEEK_SET)!=0) { printf("\nERRO no fseek.\n"); exit(1); } if (fread (string,1,tamreg,fp)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fwrite(string,1,tamreg,fb)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fseek(fp,8*tamreg,SEEK_SET)!=0) { printf("\nERRO no fseek.\n"); exit(1); } if (fread (string,1,tamreg,fp)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fwrite(string,1,tamreg,fb)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fseek(fp,4*tamreg,SEEK_SET)!=0) { printf("\nERRO no fseek.\n"); exit(1); } if (fread (string,1,tamreg,fp)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fwrite(string,1,tamreg,fb)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fseek(fp,9*tamreg,SEEK_SET)!=0) { printf("\nERRO no fseek.\n"); exit(1); } if (fread (string,1,tamreg,fp)!=tamreg) { printf("\nERRO\n"); exit(1); } if (fwrite(string,1,tamreg,fb)!=tamreg) { printf("\nERRO\n"); exit(1); } /* display the string */ printf("tamreg = %d\n", tamreg); printf("registro = %s\n", string); printf("tamarq = %d\n", tamarq); fclose(fp); fclose(fb); getch();}Aki está a solução...porém gostaria de colocar em Loop,alguém pode ajudar? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
xandyrj
Fazer um programa que lê um arquivo de dados, com registros de tamanho fixo e gera outro, intercalando o primeiro com o "metade + 1", o segundo com o "metade +2", o terceiro com o "metade + 3", ....
Exemplo:
Dado um arquivo de entrada com o conteúdo:
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
O arquivo de saída deverá ficar:
00001
00006
00002
00007
00003
00008
00004
00009
00005
00010
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.