Extraire des données d'un fichier .txt en C

Fermé
DouBiDou33 Messages postés 7 Date d'inscription mardi 21 avril 2009 Statut Membre Dernière intervention 22 avril 2009 - 21 avril 2009 à 12:36
 aletowk - 9 déc. 2015 à 23:09
Bonjour,
Je suis confronté à un léger problème, je suis loin d'être un expert en C, et je ne me souviens plus comment faire pour extraire des données d'un fichier .txt pour ensuite les mettre dans un tableau.
Mes données sont présentées sous la forme suivante :
1988;+4,5
je voudrais récupérer la colone avec les dates et la placer dans un tableau, et la colone avec les chiffres (qui peuvent être de la forme +x.xx ou -x.xx) et la placer dans un autre tableau.
Je ne sais pas si je suis assez clair dans mes explications
Voici le morceau de code que j'ai pour l'instant (code que j'ai trouvé sur ce site, merci à son auteur ^^)
#include <stdlib.h>
#include <string.h>

int main()
{
FILE *fptrNO,*File;
int FileNum,i,j,k;
char *fich;
fptrNO = fopen("evolution CAC 40", "r");
if(fptrNO != NULL)
{
fscanf(fptrNO, "%d", &FileNum);
for (i = 1; i < FileNum + 1; i++)
{
fscanf(fptrNO,"%c",&fich);
printf("\n %c\n \n",fich);
File = fopen("evolution CAC 40","r");
if(File != NULL)
{
/* instructions */
}
}
}
fclose(fptrNO);
return EXIT_SUCCESS;

C'est donc dans la partie instructions que je ne sais pas quoi mettre, je me souviens d'un scanfile ou qqch dans le genre, mais je crois que c'était du C++, or je ne peux travailler qu'en C...
Merci des éventuelles réponses ^^
PS : je compile avec code blocks je sais pas si c'est utile de le préciser ^^
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
21 avril 2009 à 14:34
Salut,
Voici une version fonctionnelle, mais qui ne gère pas les cas où le fichier est mal formaté.
Si tu souhaites une version plus robuste, t'as qu'à demander ;-))).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    FILE *fp=fopen("tmp.txt","r");
    if(fp==NULL) {
        fputs("erreur d'ouverture\n",stderr);
        return 0;
    } else {
        int t_annee[10];
        double t_nb[10];
        char buffer[250];
        size_t sz=0;
        size_t i;

        while(fgets(buffer,sizeof buffer,fp)) {
            char buf_Nb[10];
            if(sscanf(buffer,"%d;%9s",t_annee+sz,buf_Nb)==2) {
                char *p=strchr(buf_Nb,',');
                if(p!=NULL) *p='.';
            }
            t_nb[sz]=strtod(buf_Nb,NULL);
            sz++;
        }

        fclose(fp),fp=NULL;

        for(i=0;i<sz;i++)
            printf("%d => %f\n",t_annee[i],t_nb[i]);
    }
        return 0;
}

Cdlt
5
DouBiDou33 Messages postés 7 Date d'inscription mardi 21 avril 2009 Statut Membre Dernière intervention 22 avril 2009
21 avril 2009 à 15:34
Merci fiddy d'avoir répondu si vite, cependant, lorsque je lance ton programme, j'ai bien la tite fenêtre noir qui se pointe, comme en temps normal, seulement code blocks (le logiciel que j'utilise pour programmer) plante... C'est pas la première fois que ça me le fait lorsque j'essaye des solutions pour mon problème, est-ce que ça viendrai du logiciel ?
Cordialement
0
DouBiDou33 Messages postés 7 Date d'inscription mardi 21 avril 2009 Statut Membre Dernière intervention 22 avril 2009
21 avril 2009 à 15:53
C'est bon, c'est juste la taille des tableaux t_annee et t_nb qui n'allait pas, il m'en fallait des plus grands (mais ça tu ne pouvais pas savoir ^^) Donc le programme marche, merci infiniment !!!!


Maintenant que cette étape est faite, j'ai un autre problème qui se présente :
Avec ces deux tableaux (les années, et l'évolution du CAC 40 depuis sa création), je doit faire un graphe, mais il me semblait qu'il y avait une fonction toute prète, mais non, donc comment je fais ? (j'ai appris à programmer sous LabWindows CVI, ça explique mon bas niveau, on avait des fonctions tte pretes ^^)
Donc comment dois-je faire pour, à partir des deux tableaux, tracer une courbe (plus nuage de points) et ensuite tracer des droites ? je sais pas si je suis assez clair, mais je saurais mieux l'expliquer avec un dessin ^^
0
regarde fonctionnement de GNUPLOT tres pratique pour tout ca
0