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 :

Lire une ligne précise dans un fichier de données


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut Lire une ligne précise dans un fichier de données
    Bonjour,

    Je débute en C et suis plus familier de Matlab.

    Je cherche à lire dans un fichier txt construit de la façon suivante

    % x y z t
    1 1 1 4
    1 1 2 6
    ....

    J'aimerai récupérer une ligne précise (la i-ème ligne) et à travailler avec ces 4 variables. Or je n'ai trouvé aucun outil permettant de n'extraire qu'une ligne.

    Si vous avez un lien ou une idée, je suis preneur !

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    As-tu regardé du côté de fgets() ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut
    Merci pour votre implication.

    J'ai effectivement regardé fgets() mais je ne vois pas où choisir la ligne à récupérer.

    De plus, la longueur des lignes n'est pas fixée.

    Donc je ne vois pas comment l'utiliser.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Il suffit d'utiliser fgets en complément d'un compteur. Lorsque le buffer contient le caractère '\n', la ligne courante prend fin et le prochain fgets lira donc la ligne suivante ; s'il ne le contient pas, la ligne est trop longue pour le buffer, la suite sera lue au prochain fgets.

    A chaque nouvelle ligne, il faut incrémenter de 1 la variable correspondant au numéro de ligne, jusqu'à se trouver sur la ligne voulue.

    Il faut donc utiliser fgets au sein d'une boucle, et utiliser une variable dont la valeur sera augmentée de 1 à chaque nouvelle ligne.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut
    Merci beaucoup !

    Il reste encore un truc : je récupère ma ligne dans une chaine. Comment puis-je faire pour convertir cette chaine en 4 floats ?

    Merci d'avance

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Citation Envoyé par IcArnus Voir le message
    Merci beaucoup !

    Il reste encore un truc : je récupère ma ligne dans une chaine. Comment puis-je faire pour convertir cette chaine en 4 floats ?

    Merci d'avance
    Il y a deux solutions au choix :
    1) utiliser sscanf
    2) utiliser 4 strtod/strtof d'affilée.

    Par contre, les fonctions scanf et variantes ne sont pas très évidentes à utiliser pour un débutant. Mais pour un parsing simple comme ici, il n'y a rien de compliqué.

    sscanf : http://man.developpez.com/man3/scanf.3.php
    Tuto pour l'utiliser (pour des parsings plus complexes) : http://xrenault.developpez.com/tutoriels/c/scanf/

    strtof / strtod : http://man.developpez.com/man3/strtod.3.php (strtof est C99 uniquement)

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

Discussions similaires

  1. Lire une ligne spécifique dans un fichier texte
    Par ZRemi dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/04/2010, 13h58
  2. Lire une ligne précise dans un tableau
    Par kenru dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/12/2009, 14h08
  3. Lire une ligne précise d'un fichier texte
    Par Junta dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 23/04/2009, 18h26
  4. Ecrire à une ligne précise dans un fichier
    Par Valkirion dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2007, 15h18
  5. lire une ligne précise d'un fichier
    Par loic_86 dans le forum Langage
    Réponses: 1
    Dernier message: 06/01/2006, 13h37

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