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
    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
    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
    Mais existe-t'il une fonction permettant de se déplacer à une ligne donnée dans un fichier ?

  4. #4
    Expert éminent sénior
    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é
    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
    Mes tutoriels sur Developpez.com : http://eric-gbofu.developpez.com
    Auteur du livre "Codename One – Développer en Java pour iOS, Android, BlackBerry et Windows Phone"
    Mon site sur la création de jeux vidéo : http://www.devjeux.com

  6. #6
    Invité(e)
    Invité(e)
    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.

###raw>template_hook.ano_emploi###