IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

extraire une colonne de données à partir d'un fichier txt


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut extraire une colonne de données à partir d'un fichier txt
    Bonjour à tous,
    je suis débutant en C, j'ai besoin d'extraire une colonne de données issues d'un capteur. J'ai essayé d'appliquer le fonction fscanf mais ça ne marche pas je crois au moins j'ai un problème de conversion. Le programme n'arrive pas à lire toutes les données, en plus les données lues ne correspondent pas aux données d'origine dans le fichier txt.
    Pourriez vous m'aider svp,
    Je vous remercie par avance,

    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
    #include <stdio.h>
    #include <stdlib.h>
    main()
    {
     
     
    FILE* data1;
        long i, n1, n2, nval1, nval2;
        float tab1[n1], tab2[n2];
     
        /* Ouverture du fichier (en lecture texte) : */
         data1 = fopen( "data.txt", "r") ;
     
        if ( data1==NULL )
        {
            printf("\n\n erreur d'ouverture des fichiers :");
            exit(0);
        }
        fscanf( data1, "%d", &n1 );
     
      for ( i=0 ; (i<n1)&&(!feof(data1)) ; i ++ )
            fscanf( data1, "%d%f", &nval1, &tab1[i] );
     
            printf("\n\n Voici les valeurs lues dans le fichier :");
     
        for (i=0; i<n1; i ++)
            printf( "%d%f", i, tab1[i] );
     
            fclose( data1 );

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Vu ton code, il semblerait que le fichier contienne un premier nombre isolé sur une ligne, puis ensuite chaque ligne contient un int et un float. Tu confirmes ?
    Accessoirement feof() n'a pas pour but de détecter une fin de fichier. Ca la détecte oui mais comme ce n'est pas son but premier, l'utiliser pour ça amène des soucis d'algo que tu n'aurais pas si tu utilisais la bonne façon de faire (ie vérifier le nombre d'éléments lus durant la lecture)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour
    Vu ton code, il semblerait que le fichier contienne un premier nombre isolé sur une ligne, puis ensuite chaque ligne contient un int et un float. Tu confirmes ?
    Accessoirement feof() n'a pas pour but de détecter une fin de fichier. Ca la détecte oui mais comme ce n'est pas son but premier, l'utiliser pour ça amène des soucis d'algo que tu n'aurais pas si tu utilisais la bonne façon de faire (ie vérifier le nombre d'éléments lus durant la lecture)...
    Bonjour Sve@r,
    Je vous remercie, on fait le fichier contient une mesure chaque ligne :
    22.9411
    22.9411
    22.9405
    22.9402
    22.9396
    22.939
    22.939
    22.939

    j'ignore le nombre de ligne et c'est variable à chaque mesure.
    j'ai retiré foef(), le problème persiste

    Nom : Capture d'écran 2023-11-19 162726.png
Affichages : 153
Taille : 25,2 Ko

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mironim Voir le message
    le fichier contient une mesure chaque ligne :
    22.9411
    22.9411
    22.9405
    22.9402
    22.9396
    22.939
    22.939
    22.939
    Une info par ligne ? Alors pourquoi 1) commencer par lire un %d initial puis 2) lire un %d et %f (donc 2 infos) à chaque ligne ???

    Citation Envoyé par mironim Voir le message
    j'ai retiré foef(), le problème persiste
    Bien évidemment !!! Il ne convient pas mais le besoin (détecter la fin de fichier) persiste. Donc le retirer implique de le remplacer par autre chose (et de préférence par autre chose plus adapté) sinon il est évident que ça ne marchera pas mieux (et en réalité ça marchera moins bien)...

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    float f;
    while (fscanf(data1, "%f", &f) == 1)
    	printf("f=%f\n", f);
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    Je vous remercie, là ça marche, déjà j'ai affiché les valeurs du fichier d'origine, sauf pour les mettre dans un tableau tab1, j'ai rajouté ces lignes à la boucle while mais ça bloque au bout de 6 valeurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (fscanf(data1, "%f", &f) == 1)
    {   tab1[n1]=f;
        printf("f=%f\n", f);
        n1++;
    }

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mironim Voir le message
    j'ai rajouté ces lignes à la boucle while mais ça bloque au bout de 6 valeurs
    Si ça bloque au bout de 6 valeurs soit
    1) il n'y a pas plus de 6 valeurs
    2) il y a un truc qui gêne dans le fichier
    Mais moi ton exemple de 8 valeurs je le lis parfaitement.
    Et pas besoin de passer par "f", autant remplir directement le tableau... while (fscanf(data1, "%f", &tab1[n1++]) == 1); (on admettra que n1 commence à 0 car ce n'est pas écrit dans ton exemple).

    PS: à propos de n1 justement, je viens de relire ton code d'origine. Tu es sûr de toi quand tu écris float tab1[n1] ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/07/2014, 08h58
  2. Créer une base de données à partir d'un fichier .dmp
    Par funboard dans le forum Import/Export
    Réponses: 1
    Dernier message: 08/12/2008, 17h14
  3. Réponses: 1
    Dernier message: 14/05/2008, 17h02
  4. [Conception] Alimenter une base de données à partir d'un fichier texte
    Par gharbi5 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/10/2007, 13h12
  5. Réponses: 3
    Dernier message: 29/03/2006, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo