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 :

Déplacement ligne par ligne


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2008
    Messages : 101
    Points : 66
    Points
    66
    Par défaut Déplacement ligne par ligne
    Bonjour,
    J'ai crée un fichier contenant sur chaque ligne un jeu de paramètres. Je voudrais donc pouvoir me déplacer ligne par ligne pour lire un jeu de paramètres puis lancer mes fonctions avec ce jeu et ainsi de suite.
    Pour trouver le nombre de ligne de mon fichier je pensais utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int nb_lines = 0;
    while getline(fichier,ligne)
    {
      ++nb_lines;
    }
    Mais j'avoue que je ne connais pas la fonction pour se déplacer de ligne en ligne donc en indiquant le numéro de la ligne qui m'intéresse. J'ai regardé (peut-être mal) dans les FAQ mais je n'ai rien trouvé.
    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 063
    Points : 40 241
    Points
    40 241
    Par défaut
    Il n'y a rien en C de "tout cuit" pour lire une ligne de longueur arbitraire.
    Par contre, il y a une fonction pour lire une ligne en connaissant sa longueur maximale: fgets().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2008
    Messages : 101
    Points : 66
    Points
    66
    Par défaut
    Mais existe-t'il une fonction permettant de se déplacer à une ligne donnée dans un fichier ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 063
    Points : 40 241
    Points
    40 241
    Par défaut
    Non.
    Le plus simple, c'est de lire caractère par caractère en comptant les '\n'.

    Si tu veux un fichier où un "accès aléatoire" est possible, tu devras oublier les fichiers texte et te tourner vers les fichiers de données brutes (aussi appelés "fichiers binaires").
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre habitué Avatar de doderic
    Homme Profil pro
    Inscrit en
    mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2004
    Messages : 215
    Points : 164
    Points
    164
    Par défaut
    Salut! Essaie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(fgets(ligne,sizeof(ligne),fichier))
    {
    nb_lines++;
    }
    Bonne suite

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par doderic Voir le message
    Salut! Essaie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(fgets(ligne,sizeof(ligne),fichier))
    {
    nb_lines++;
    }
    Bonne suite
    Le problème de ce code est qu'il compte des lignes en trop si la variable ligne est trop petite.

    Correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        while (fgets(ligne, sizeof(ligne), stdin)) {
            int sz = strlen(ligne);
            if ((sz > 0) && ('\n' == ligne[sz - 1])) {
                nb_lines++;
            }
    Cela écrit, je pense que la méthode proposée par Médinoc reste la meilleur.

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

Discussions similaires

  1. Parcourir un Db_GRID ligne par ligne
    Par sanosuke dans le forum Bases de données
    Réponses: 8
    Dernier message: 12/05/2008, 13h14
  2. style pour tableau coloré ligne par ligne
    Par peppena dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/10/2005, 15h33
  3. lire un fichier ligne par ligne
    Par peuf23 dans le forum C
    Réponses: 6
    Dernier message: 21/09/2005, 11h43
  4. aditionner les champs d'une table ligne par ligne
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/08/2005, 09h38

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