| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 
 |  
//truc.c
 
#include<stdio.h>
#include <stdlib.h>
 
typedef struct {
  int n1;
  long int n2; //  peut aller jusque 200000
  int n3;
  int n4;
  int n5;
  int n6;
  int n7;
  int n8;
  int n9;
  int n10;
  int n11;
  int n12;
  int n13;
  int n14; //peut etre NA dans le csv :s ce serait pour ça que ça ne fonctionne pas? (entre autres)
  int n15; //peut etre NA dans le csv
  int n16; //peut etre NA dans le csv
  int n17;
  int n18; //booleen
  int n19; 
  int n20; 
} maStructure;
 
 
//prototype
maStructure * parser(char filename);
 
 
 
/** 
* read the csv file and load it in a C table
* IN: filename
* OUT: data which contains all the lines of the csv file in "maStructure" format
**/
maStructure * parser(char filename){
 
  FILE* file = NULL; //fichier vide
  char buffer[BUFSIZ]; //tableau tampon de taille n  =>ma principale source d'erreur lorsque je compile: je ne vois pas trop quoi lui donner comme taille: chaque ligne peut avoir une taille différente... Je ne sais pas trop comment fabriquer mon buffer pour la suite en fait... :s
  int i = 0;
  file = fopen(filename, "r+");
 
  if (file==NULL) {
    printf("cannot open file %s\n", filename);
    exit(1);
  }
 
  //attribution de l'espace pour les donnees en memoire
  maStructure data = malloc(sizeof(maStructure)*nfile);
 
  printf("loading %s\n", filename); 
  fgets(buffer, bufsiz, file);		// pour lire la ligne header du csv
 
  //tant qu'il existe des lignes à lire
  while (fgets(buffer, sizeof(buffer), file)){
 
    //on stock chaque element de la ligne dans la colonne de data correspondante ==> problème pour le traitement des NA?
    sscanf(buffer, "%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d", 
	  &data[i].n1;
	  &data[i].n2;
      &data[i].n3;
      &data[i].n4;
      &data[i].n5;
      &data[i].n6;
      &data[i].n7;
      &data[i].n8;
      &data[i].n9;
      &data[i].n10;
      &data[i].n11;
      &data[i].n12;
      &data[i].n13;
      &data[i].n14; 
      &data[i].n15;
      &data[i].n16;
      &data[i].n17);
 
&data[i].n18=NULL;
&data[i].n19=NULL; 
&data[i].n20=NULL; 
 
#if (DEBUG > 1)
    printf("%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d,%d,%d, %d, %d, %d, %d, %d",
      data[i].n1;
      data[i].n2;
      data[i].n3;
      data[i].n4;
      data[i].n5;
      data[i].n6;
      data[i].n7;
      data[i].n8;
      data[i].n9;
      data[i].n10;
      data[i].n11;
      data[i].n12;
      data[i].n13;
      data[i].n14; 
      data[i].n15;
      data[i].n16;
      data[i].n17);  
#endif
    i++;
  }
 
/**
//  while ((c = fgetc (file)) != EOF) {
//    if (c == ';' || c == '\n') {
//        printf ("%ld\n", strtol (buffer, NULL, 10));
//        i = 0;
//        memset (buffer, 0, sizeof buffer);
//      } else {
//      buffer[i++] = c;
//    }
//  }
**/
 
  fclose (file);
 
  return(&data);
} 
 
 
 
 
int main(int argc, char *argv[]) {
  global int nfile = 27; //mauvaise idée de le mettre en globale?
  maStructure * a = parser(*argv[0]);
 
  return(a);
} | 
Partager