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 identification dans fichier txt fscanf fseek


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut lecture identification dans fichier txt fscanf fseek
    Bonjour,

    voilà j'ai un fichier .txt qui est écrit de la manière suivante en boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    blabla1 : %d\nBlabla2: %f blabla3 @ (%f, %f)\n\n
    Ce que je souhaite faire c'est un fscanf (ou fseek) pour trouver récupérer les données %f uniquement. Il y en a trois.

    le problème c'est que je ne veux pas des char %s et et espace etc.

    Je suis débutant et je cherche la meilleure façon de faire cela, j'ai pensé faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %s %s %s %d\n%s %f %s %s %s%f, %f%s\n\n
    dans le fscanf pour ensuite que prendre ceux qui m'intéresse mais du coup je serais obligé de stocké le reste des %s à des endroits. Ce n'est pas une bonne solution.

    Sinon lui dire de sauter par exemple le curseur dix places à droite à chaque fois et ensuite détecter le caractère juste avant le %f. Je ne sais pas comment coder cette idée.



    Une idée ?



    merci

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Tu peux rajouter des étoiles pour ignorer certaines conversions et ainsi ne pas avoir à les stocker. Voir par exemple ici : http://stackoverflow.com/questions/2...at-identifiers

    Il y a un cours intéressant sur scanf() sur Developpez.com : http://xrenault.developpez.com/tutoriels/c/scanf/

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    merci de votre réponse très intéressante.

    J'ai fait donc dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(acquisition, "%*s %*s %*s %*d\n%*s %*s %f %*s %*s %*s%f, %f%*s\n\n", &tot, &a, &b);
    Pour des données écrites dans un fichier txt en boucle à l'aide de ce bout de code qui est dans une fonction créée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Donnee numero : %d\nMasse : %f kg @ (%f, %f)\n\n"
    J'ai simplement remplacé les chaines de caractères par "%*s". Par contre je ne récupère toujours pas les bons floats que je veux, j'ai regardé en console debug avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("donnees : %d, %f et %f", tot, a, b);
    Peut-être est-ce dû au saut de ligne ? Il y a une redondance bien sûr et peut-être que getline peut aider d'après mes recherches; étant donné que "Donnee numero : %d\n" ne m'intéresse pas.

    merci

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Pourrais-tu nous donner un extrait du fichier et l'affichage correspondant stp ?

    De plus, tu peux sûrement t'inspirer de ce qui est fait ici pour simplifier la chaîne formatée : http://gpraveenkumar.wordpress.com/2...ng-with-space/

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    voici un extrait du fichier texte :

    Donnee numero : 299
    Masse : 9.683766 kg @ (0.978229, -0.558335)
    
    Donnee numero : 300
    Masse : 9.717045 kg @ (0.974359, -0.588115)
    
    Donnee numero : 301
    Masse : 9.781482 kg @ (0.964731, -0.604868)
    
    Donnee numero : 302
    Masse : 9.747455 kg @ (0.972473, -0.633680)
    
    Donnee numero : 303
    Masse : 9.860712 kg @ (0.961127, -0.643856)
    
    Donnee numero : 304
    Masse : 10.043962 kg @ (0.948479, -0.689421)
    et là un extrait du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    retrieve_printf(j, acquisition, "Donnee numero : %d\nMasse : %f kg @ (%f, %f)\n\n", numero_acquisition, total, x_board, y_board);
    cette fonction affiche en console ce qui est entre guillemets et suivant la valeur de j qui est une condition sur un bouton elle autorise l'écriture sur un fichier texte ou non.

    merci

    Je cherche simplement à récupérer les trois floats à partir du fichier texte pour exécuter un replay.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Tu dis que les nombres lus ne sont pas les bons, quelles valeurs as-tu pour ce fichier par exemple ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Etant donné que les données se rafraîchissent très vite il sera difficile de savoir à quelle ligne correspond ces chiffres. J'ai des chiffres comme -1610612736 pour tot et 0.000000 pour a et b.

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    le problème est partiellement résolue en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %*[^:]:%*d%*[^:]:%f%*[^(](%f,%f)
    car à chaque itération je ne récupère que le premier triplet et j'aimerai qu'à l'activation du replay le programme commence au début du fichier et passe ensuite à chaque nouvelle itération au triplet de float suivant.
    Je me demande si on peut utiliser le numéro de float pour incrémenter le saut de ligne.

Discussions similaires

  1. Lecture D'un fichier TXT et Remplir dans un tableau
    Par Maz85 dans le forum VBScript
    Réponses: 2
    Dernier message: 21/05/2013, 11h21
  2. Réponses: 6
    Dernier message: 25/10/2012, 18h31
  3. Réponses: 2
    Dernier message: 27/07/2011, 10h10
  4. Lecture d'un fichier Txt dans une JSP !
    Par bim92i dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 29/04/2008, 09h55
  5. [C++] lecture/ecriture dans fichier txt/binary
    Par vince3320 dans le forum C++
    Réponses: 6
    Dernier message: 28/09/2007, 18h00

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