Salut
Je voudrais savoir comment est-ce que l'on fait pour récupére des informations dans un fichier .csv pour les placées dans une structure.
et le parcourt d'un fichier csv se fait-il avec fseek()?
Merci
Version imprimable
Salut
Je voudrais savoir comment est-ce que l'on fait pour récupére des informations dans un fichier .csv pour les placées dans une structure.
et le parcourt d'un fichier csv se fait-il avec fseek()?
Merci
Avec fgets et strtok par exemple, lecture ligne par ligne (fgets), extraction des données avec le pistage des séparateurs (strtok).
Pas d'utilisation de fseek().
Bonjour!
Un fichier .csv est un fichier texte organisé en lignes où les valeurs de chaque ligne sont séparées par des ;
Si tu connais le type des données, c'est facile à lire avec les fonctions fread() ou fscanf(). Tu peux bien sûr utiliser fseek.
Si tu veux plus de détails, donne un extrait de ton fichier et la structure où tu veux charger les données.
extrait de ma structure :
Code:
1
2
3
4
5
6
7
8
9
10 struct InfoTirage { int Numero; float NbFois; float Pourcentage; char Date[8]; int Ecart; float NbTirage; }; struct InfoTirage UnTirage;
Le char Date[8]; me gêne un peu, quel est le contenu exact de ce champ ?
c'est un champ date => ex : 01/06/06
comment ca le champs te gene? par rapport à son emplacement, ou sa taille?
01/06/06, ca fait 8 caracteres, ton tableau est donc trop petit pour contenir le \0 final...Citation:
Envoyé par nemesys971
oups! :oops: c'est vrai!
parcontre pourquoi ca me met ca : "strlen' undefined..."
C'est la fonction strlen qui est undefined ? inclus <string.h>
Pour le champ date c'était effectivement la taille qui me gênait.
Ceci dit, on peut laisser à 8 mais la manipulation est plus compliquée.
Ok merci
parcontre je ne connais pas du tout la fonction strtok
pour l'utilisation de fgets
Code:fgets(&UnTirage, sizeof(struct InfoTirage), PtrFichier);
Attends, du fgets() depuis un fichier texte directement sur une structure ?
Qu'as-tu fumé?
Il faut parser chaque champ séparément pour remplir la structure.
a oui et on fait sa comment?
fgets() sur un buffer texte d'une taille suffisante, puis strtok() ou strtok_r()/strtok_s() pour séparer les morceaux de la chaîne (séparés par des virgules ou des points-virgule, généralement) et strtol() pour convertir chaîne en nombre...
fgets(Chaine, sizeof(Chaine), PtrFichier);
quand je veux afficher les données récupérée par la chaine ... rien
apres quand je vérifie mon fichier ... impossible d'afficher le fichier
...euh je fais comment?
Montre un exemple de fichier CSV. SI il n'est pas lisible dans un éditeur de texte, c'est qu'il est sérieusement buggé ou compressé...Citation:
Envoyé par nemesys971
Numero NbFois Pourcentage Date EcartSorti NbTirage
1 645 14,81 05/06/2006 0 4355
2 607 13,94 29/04/2006 4 4355
3 591 13,57 05/03/2006 2 4355
4 650 14,93 05/03/2006 2 4355
C'est pas du CSV, mais du TSV (Tabulation Separated Values) !Citation:
Envoyé par nemesys971
OK. Montre le code qui lit les lignes (doit être compilable).
(Et si tu penses t'enrichir en jouant au Loto, laisse tomber...)
ouais désolé mais en faite j'avais ouvert mon fichier sous excel c'est pour ca.
en l'ouvrant en mode texte ca donne:
Code:
1
2
3
4
5
6
7 Numero;NbFois;Pourcentage;Date;EcartSorti;NbTirage 1;645;14,81;05/06/2006;0;4355 2;607;13,94;29/04/2006;4;4355 3;591;13,57;05/03/2006;2;4355 4;650;14,93;05/03/2006;2;4355 5;625;14,35;05/06/2006;0;4355
je ne pense plus pour gagner... (c'est plus pour moi)
quand j'ouvre le fichier en C aprés c'est plus possible de l'ouvrir. Pourquoi?
Parce que tu fais une c*****rie quelque part, montre ton code.
voici comment j'ouvre mon fichier:
Code:
1
2 PtrFichier = fopen("C:\\Loto.csv","w+");
Evidemment, à chaque fois tu le détruis.Citation:
Envoyé par MSDN
Si tu veux modifier ce fichier, tu l'ouvres en lecture, ("r") tu le lis ligne par ligne avec fgets, et tu écris les lignes modifiées ou pas dans un fichier temporaire, une fois les modifs terminées, tu ferme le fichier, le détruis et renomme le fichier temporaire, c'est la seule méthode !
pourquoi "w+" et pas "r" tout cours ?Citation:
Envoyé par nemesys971
(Et mettre un bête ficher de données à la racine; ça ne se fait pas...).
Et tu le fermes un jour ?
oui je le referme
Code:fclose(PtrFichier);