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

  1. #1
    Candidat au 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
    Points : 3
    Points
    3
    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
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

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

  3. #3
    Candidat au 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
    Points : 3
    Points
    3
    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 chevronné
    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
    Points : 1 750
    Points
    1 750
    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
    Candidat au 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
    Points : 3
    Points
    3
    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 chevronné
    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
    Points : 1 750
    Points
    1 750
    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)

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    fgets va nécessiter d'avoir un espace mémoire où enregistrer la ligne et elle aura toujours une limite qu'il faut choisir assez grande pour éviter de devoir modifier cette limite à chaque modification mais aussi assez petite pour ne pas prendre trop de mémoire.


    Pourquoi ne pas utiliser une boucle avec un fgetc en arrêtant dès qu'on rencontre un ième '\n' ou dès qu'une erreur se produit?

  8. #8
    Candidat au 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
    Points : 3
    Points
    3
    Par défaut
    Merci à tous pour votre aide !

    J'ai réussi grâce à vous à faire ce que je voulais.

    Merci

+ 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