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 :

Lecture de fichier balisé et extraction de données


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Avide d'apprentissage
    Inscrit en
    Avril 2012
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Avide d'apprentissage
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 80
    Par défaut Lecture de fichier balisé et extraction de données
    Bonjour,

    Je suis actuellement sur un sujet qui me taraude depuis un petit moment.

    Voici mon problème :

    -1 ) J'ai le fichier ci-joint, qui m'a été généré par un programme
    -2) Dans ce fichier, il y a plusieurs informations repérées par des balises commençants par des "$".
    -3) Les données qui m'intéressent sont celles qui sont sous la balise "$points".
    Sachant que ces points sont classés selon le modèle suivant :

    numéro abscisse ordonnée

    -4) J'aimerai pouvoir récupérer ces points et les placer dans une structure ayant comme champs : numéro abscisse ordonnée

    -5) Après manipulation de ces points, j'aimerai les placer dans un autre fichier suivant le même format que le fichier précédent, c'est-à-dire selon le modèle : numéro abscisse ordonnée

    C'est la première étape de mon gros problème, en espérant avoir été assez explicite.

    Merci d'avance pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Tu cherches du code ou des idées ?

    Si 1, je te laisse trouver la direction de la sortie

    Si 2, commence simple et surtout par le début. Crée un type structure et une fonction pour en afficher à l'écran le contenu tel que tu souhaites le voir apparaître dans le fichier. Ainsi, il te suffira "d'afficher dans un fichier" avec fprintf() au lieu de printf().

    Au passage, écris les fonctions de traitement et donne leur à manger des structures déclarées en dur dans le code.

    La partie la plus complexe pour toi sera sûrement de faire la lecture depuis un fichier. fscanf() est la fonction adaptée à cela. Voir ce tutoriel : http://xrenault.developpez.com/tutoriels/c/scanf/ Commence par un fichier simple avec uniquement ceci :
       1  0.00000000000E+00  0.00000000000E+00 1  1.00
    Puis avec ceci :
    4  nombre de points
       1  0.00000000000E+00  0.00000000000E+00 1  1.00
       2  0.00000000000E+00  1.00000000000E-01 1  1.00
       3  1.00000000000E-01  1.00000000000E-01 1  1.00
       4  1.00000000000E-01  0.00000000000E+00 1  1.00
    Quand c'est bon, prends le fichier complet.

    Il faut toujours y aller par étapes.

  3. #3
    Membre confirmé
    Homme Profil pro
    Avide d'apprentissage
    Inscrit en
    Avril 2012
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Avide d'apprentissage
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 80
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Tu cherches du code ou des idées ?
    Merci déjà pour cette première approche.

    Mon premier soucis est de savoir quel code mettre en place afin d'atteindre les points contenus sous la balise $points.

    Si j'arrive à y accéder ça pourrait déjà me débloquer, au moins pour le début.

    Merci encore

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    au moins pour le début.
    Tu souhaites faire en premier ce que je te conseille de faire en dernier ?

    C'est un choix.

    Avant d'écrire du code, il faut écrire l'algorithme de traitement. Qu'est ce que tu ferais ? Je présume que tu commencerais par lire le fichier jusqu'à trouver la ligne "$points" et ensuite...... Quand tu auras écris cela en français, alors il sera temps d'écrire du code.

    A ton papier et ton crayon

  5. #5
    Membre confirmé
    Homme Profil pro
    Avide d'apprentissage
    Inscrit en
    Avril 2012
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Avide d'apprentissage
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 80
    Par défaut
    Bonjour,

    Mon problème n'a pas l'aire de vouloir se résoudre.

    En fait j'ai essayé comme tu me l'as indiqué de travailler sur un fichier simple, ça marche, j'arrive à récupérer les valeurs.

    Le truc c'est que je lis mon fichier ligne par ligne, c'est la seule méthode qui m'a parue un peu simple.

    Le problème est que mon code ne me donne pas ce que je veux, le voici :

    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
     
        char* point ="$points";
        int taille = (unsigned int)strlen(point);
        char* chaine[taille];
     
        FILE* fich = fopen("test.txt","r+");
     
        if(fich!=NULL){
        rewind(fich);
        while(fgets(chaine,sizeof(point),fich)!= NULL){ // on lit tout le fichier ligne par ligne tant que celui-ci n'est pas vide
            if (strcmp(chaine,point)==0){
               printf("la position du curseur après : %d \n",ftell(fich)); // si chaine=point on affiche la position du curseur
               printf("la chaine vaut :%s\n",chaine);
     
                  }
     
          }
     
            fclose(fich);
        }
        else perror("fich");
    J'ai l'impression que ma condition "if" ne marche pas.

    En fait j'oriente ma programmation vers la position du curseur dans le fichier.

    Je fonctionne comme ça car j'ai remarqué que tous les fichiers (.txt) qui me seront générés, l'emplacement de la balise "$points" sera toujours le même.

    Je pourrai copier mes points si ma condition marchait mais je ne sais pas du tout pourquoi elle ne marche pas.

    Merci pour votre aide.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    1. char* point ="$points"; étant une chaine en dur non toujours modifiable, on préfèrera rajouter const. Cf FAQ
    2. int taille = (unsigned int)strlen(point); pour quoi effectuer un cast vers le type unsigned int si tu le stockes dans un int ?
    3. char* chaine[taille]; attention ceci n'est pas un tableau de char, mais un tableau de pointeurs sur char. N'oublie pas non plus de prendre en compte le '\0' final.
    4. fgets(chaine,sizeof(point),fich) je te suggère de regarder la valeur de sizeof(point)

    Sinon la logique de ton programme est bonne

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/11/2012, 09h17
  2. Lecture fichier PDF et extraction de données avec Java
    Par le_misterioso dans le forum Général Java
    Réponses: 2
    Dernier message: 03/04/2011, 01h32
  3. Réponses: 2
    Dernier message: 19/08/2009, 21h17
  4. Lecture de fichiers cvs et projections de données
    Par logon dans le forum Général Python
    Réponses: 5
    Dernier message: 20/02/2007, 09h27

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