Rechercher : dans
Par :

[C++] Getline : comment récupérer ligne n°x ?

Dernière réponse le 25 jan 2009 à 17:35:31 Paddington Brown, le 25 jan 2009 à 13:14:03 
 Signaler ce message aux modérateurs

Bonjour les humains ! :-)


Dans la continuité de ce programme, j'essaie d'en créer un autre qui présente les caractéristiques suivantes.

- Lecture dans le fichier test.txt
- Récupération d'une ligne dans ce fichier
- Affichage de cette ligne sur le terminal



Voici mon fichier test.txt (les mots sont séparés par des retours à la ligne) :

ABATTRE
ABORDER
ACACIAS
ACIDITE
AJOUTER
AMPOULE



Voici mon programme ours.cpp :

#include <fstream>
#include <string>
#include <iostream>

int main()
{
    std::ifstream fe("test.txt");
    std::string ligne;
    getline(fe, ligne); std::cout << ligne << std::endl;
    getline(fe, ligne); std::cout << ligne << std::endl;
    getline(fe, ligne); std::cout << ligne << std::endl;
    system("Pause");
    return 0;
}



En l'exécutant, ours.exe m'affiche les trois premières lignes du fichier test.txt

Mais ce que je souhaiterais faire, c'est afficher uniquement le mot ACIDITE (par exemple).
Pour le moment, j'effectue quatre fois la fonction GETLINE pour avoir le mot en quatrième position.

Mais il doit y avoir un moyen plus simple de le faire, non ?!?!! :-)


Doit-on utiliser un itérateur ?

Pouvez-vous m'aider à nouveau ? Un pot de marmelade d'orange à la clé. :-D


Cordialement.
L'Ours Paddington Brown.

Meilleures réponses pour « [C++] Getline : comment récupérer ligne n°x ? » dans :
Télécharger le contenu d'une page WEB distante VoirIntroduction Installation sous Linux (Ubuntu / Debian) Installation sous Windows Dev C++ Microsoft Visual C++ Petite exploration des fonctions de libcurl Un exemple: télécharger la page d'accueil de CCM Notre fichier source Compilation...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Caractéristiques du langage C VoirLe fichier source Le fichier source d'un programme écrit en langage C est un simple fichier texte dont l'extension est par convention .c. Note d'un visiteur (J.Grondin) : L'extension est en minuscules. Le .C (majuscule) est interprété par...

1

lami20j, le 25 jan 2009 à 13:31:26

Salut,

Voici un exemple en C

lami20j@debian:~/trash$ cat fic.txt
ABATTRE
ABORDER
ACACIAS
ACIDITE
AJOUTER
AMPOULE
lami20j@debian:~/trash$ cat ccm41_fgets.c
#include<stdio.h>

int main()
{
        FILE *F;
        char s[50];
        if(NULL==(F=fopen("fic.txt","rb")))
                return 1;
        /* lecture de fichier */
        while(fgets(s,50,F)!=NULL)
                if(strcmp(s,"ACIDITE\n")==0)
                        printf("%s",s);
        return 0;
}
lami20j@debian:~/trash$ gcc ccm41_fgets.c
lami20j@debian:~/trash$ ./a.out
ACIDITE
106485010510997108

Répondre à lami20j

2

lami20j, le 25 jan 2009 à 13:47:06

Re,

Ou avec le numéro de ligne (Tu n'as qu'à l'adapter pour c++)

lami20j@debian:~/trash$ cat fic.txt
ABATTRE
ABORDER
ACACIAS
ACIDITE
AJOUTER
AMPOULE
lami20j@debian:~/trash$ cat ccm42_fgets.c
#include<stdio.h>

int main()
{
        FILE *F;
        char s[50];
        int i=0;
        if(NULL==(F=fopen("fic.txt","r")))
                return 1;
        /* lecture de fichier */
        while(fgets(s,50,F)!=NULL)
                if(i++ == 3)
                        printf("%s",s);
        return 0;
}
lami20j@debian:~/trash$ gcc ccm42_fgets.c
lami20j@debian:~/trash$ ./a.out
ACIDITE

106485010510997108

Répondre à lami20j

3

Paddington Brown, le 25 jan 2009 à 15:56:02
  • +1

Bonjour Lami20j. ;-)

Désolé de répondre aussi tardivement, j'ai eu un peu de mal à adapter le code en C++

Le fichier test.txt n'a pas été modifié.
Voici la nouvelle version du fichier test.cpp :


#include <fstream>
#include <iostream>
#include <set>
#include <string>


int main()
{
    std::ifstream fe("test.txt");
    std::string s;
    int i; int j = 0;
    std::cout << "Quel numero de ligne ? ";
    std::cin >> i;
    
    if (i < 0 || i > 20)
       {
            std::cout << "Numero de ligne inexistant" << std::endl;
            system("Pause");
            return 1;
       }
       
    while(j < i)
            {
              getline(fe, s);
              j++;
            }
    
    std::cout << s << std::endl;
    
    system("Pause");
    return 0;
}




Merci beaucoup de m'avoir répondu ! :-)


Cordialement.
L'Ours Paddington Brown.

Répondre à Paddington Brown

4

Paddington Brown, le 25 jan 2009 à 15:58:13

Et bien entendu, je tape le contraire de ce que je veux écrire. :-)

Le fichier test.txt a bien été modifié, il contient 20 mots.

C'est pour cela que j'ai ajouté le code suivant :

 if (i < 0 || i > 20)
       {
            std::cout << "Numero de ligne inexistant" << std::endl;
            system("Pause");
            return 1;
       }

Répondre à Paddington Brown

5

lami20j, le 25 jan 2009 à 16:13:26

Re,

Le plus important c'est que tu as réussi résoudre ton souci ;-) 106485010510997108

Répondre à lami20j

6

Paddington Brown, le 25 jan 2009 à 17:11:55

Ah, j'ai réussi à créer une variante de ce programme. :-)

Il affiche un mot au hasard parmi une liste de 20 mots inscrits dans un fichier "test.txt".
Je laisse le code source ici pour celles et ceux que ça intéresse.


#include <fstream>
#include <string>
#include <iostream>
#include <set>

int main()
{
    srand(time(NULL));
    std::ifstream fe("test.txt");
    std::string s;
    int i = (rand() % 21);

/* La commande ci-dessus affecte la variable i d'un entier compris entre 0 et 20. */
/* Vous pouvez modifier la valeur selon le nombre de mots présents dans votre liste. */

    int j = 0;
    
       
    while(j < i)
            {
              getline(fe, s);
              j++;
            }
    
    std::cout << s << std::endl << std::endl;
    
    system("Pause");
    return 0;
}



Encore merci à toi, Lami20j, d'avoir répondu à mon appel à l'aide. :-)

Amicalement.
L'Ours Paddington Brown.

Répondre à Paddington Brown

7

 lami20j, le 25 jan 2009 à 17:35:31

Salut,

Merci d'avoir partager la solution ;-)

Bonne continuation.
106485010510997108

Répondre à lami20j
Collection CommentÇaMarche.net