fpontesmorales

prat_11 - ler arquivo

Sep 11th, 2011
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.26 KB | None | 0 0
  1. /*5. [Farrer - Algoritmos Estruturados] Dado o arquivo cadastro com registros
  2. com os campos nome, sexo, corDosOlhos, peso e dataDeNascimento.  , separá-lo em dois arquivos:
  3. um chamado homens, com os registros  cujo campo SEXO apresente o valor 1 (sexo masculino)
  4. e o outro chamado  mulheres, com os registros cujo campo SEXO seja igual a 2 (sexo feminino).
  5. Os  registros dos novos arquivos deverão possuir os seguintes campos: nome, corDosOlhos,
  6. peso e dataDeNascimento. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #pragma pack(1)
  11.  
  12. typedef struct {
  13.   int sexo;
  14.   char nome[30];
  15.   char corDosOlhos[30];
  16.   float peso;
  17.   char dataDeNascimento[30];
  18. } bd;
  19.  
  20.  
  21. int main (void){
  22.  
  23.     FILE *arquivo , *masculino, *feminino;
  24.     long tamanho;
  25.     int n, i;
  26.     bd registro;
  27.  
  28.  
  29.     if((arquivo=fopen("cadastro.data", "r+b")) == NULL) {
  30.         printf("Erro ao abrir o arquivo.\n");
  31.         exit(1);
  32.             }
  33.     if((masculino=fopen("masculino.data", "w+b")) == NULL) {
  34.             printf("Erro ao abrir o arquivo.\n");
  35.             exit(1);
  36.             }
  37.     if((feminino=fopen("feminino.data", "w+b")) == NULL) {
  38.             printf("Erro ao abrir o arquivo.\n");
  39.             exit(1);
  40.             }
  41.  
  42.     tamanho = tamanho_arquivo(arquivo);
  43.     n = tamanho/98;
  44.  
  45.     for(i=0 ; i<n;i++) {
  46.         fread(&registro, sizeof(bd), 1, arquivo);
  47.         if (feof(arquivo))break;
  48.  
  49.         else if(registro.sexo==1){
  50.             fwrite(&registro,sizeof(registro),1,masculino);
  51.             }
  52.  
  53.         else if(registro.sexo==2){
  54.             fwrite(&registro,sizeof(registro),1,feminino);
  55.             }
  56.  
  57.     }
  58.  
  59.     fclose(arquivo);
  60.     fclose(masculino);
  61.     fclose(feminino);
  62.     system("pause");
  63.     return 0;
  64.  
  65. }
  66.  
  67. tamanho_arquivo(FILE *arquivo){
  68.  
  69.     long tamanho;
  70.  
  71.     if (arquivo != NULL) {
  72.         // movimenta a posição corrente de leitura no arquivo
  73.         // para o seu fim
  74.         fseek(arquivo, 0, SEEK_END);
  75.         // pega a posição corrente de leitura no arquivo
  76.         tamanho = ftell(arquivo);
  77.         // imprime o tamanho do arquivo
  78.         printf("O arquivo possui %ld bytes\n\n",  tamanho);
  79.         fseek(arquivo,0,SEEK_SET); //volta pro começo do arquivo
  80.  
  81.     } else {
  82.         printf("Deu erro!");
  83.     }
  84.     return tamanho;
  85.  
  86. }
Advertisement
Add Comment
Please, Sign In to add comment