Bonjour tout le monde dans le cadre d'un projet je voudrais stocker un fichier csv dans un tableau de structures (original vous me direz). Mon fichier est de la forme :
int,string,string,int.
Et un probleme se pose dans le stockage en effet le stockage des int ne pose aucun probleme : Si le 1er int du fichier est 2 => Tab[0].premierint me donneras effectivement 2. Mais pour les string il y a un probleme en effet que ce soit Tab[0].premierstring , Tab[1].premierstring ... Le resultat seras toujours le dernier des premierstring qui seras affiché (un exemple s'impose je pense![]()
1,jean,paul,2
6,harry,potter,7
Si je fais Tab[0].premierint il me renvoie 1 et Tab[1].premierint il me renvoie 6 mais si je fais Tab[0].premierstring j'aurais harry .... Pour ne pas perdre de temps je vais poster mon code...
Oui je sais les variables globales c'est le mal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
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 typedef struct { int numero; char *nom; char *prenom; int position; }Concurrent; char *nomfichier; long taille=0; Concurrent *Table; FILE *fp; void FileToTable() //cette fonction prends les données du fichier { //calcul taille en lignes long i; char buffer[1025]; char c; fp=fopen("test.txt","r"); if(fp!=NULL) { while((c=fgetc(fp))!=EOF) if(c=='\n') { taille++; } } fseek(fp,0,SEEK_SET); //taille du Tableau = nombre de lignes du fichier txt :) Table=malloc(taille*sizeof(Concurrent)); printf("%d",taille); for(i=0;i<=taille;i++) { fscanf(fp,"%s",buffer); printf("%s\n",buffer); Table[i].numero=atoi(strtok(buffer,",")); Table[i].nom=strtok(NULL,","); Table[i].prenom=strtok(NULL,","); Table[i].position=atoi(strtok(NULL,",")); } fclose(fp); printf("%s",Table[0].nom); }mais ce probleme ne me permet pas deja de penser à l'optimisation puisque j'ai l'impression d'etre pire qu'un debutant
. Je remercie d'avance les personnes qui pourrait me repondre
.
PS: En contraignant mes chaines de caracteres ou en utilisant strcpy j'obtiens le meme probleme.
Partager