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 :

ifstream ==> differente façons d'ouvrir un fichier texte?


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut ifstream ==> differente façons d'ouvrir un fichier texte?
    Bonjour tous,

    en regardant quelques tuto j'ai vu que pour ouvrir des fichiers en mode lecture il fallait faire ceci;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ifstream fichier("test.txt", ios::in);  // on ouvre le fichier en lecture
    or je suis en train de reprendre le programme d'une personne qui les ouvre comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inputfile.open(_inputFileName.c_str(),ios::in);
    Pouvez vous m'expliquer s'il vous plait:

    1°) inputfile est un nom part defaut? quelle que soit les classes que j'utilise j'utiliserai le mot clef inputfile ?

    2°) _inputFileName.c_str() concernant le .c_str() je n'ai pas du tout compris a quoi cela sert, c'est pour eviter de marquer _inputFileName.txt ?


    j'espere que vous pourrez m'expliquer

    merci d'avance

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Bonjour,

    Citation Envoyé par 21did21
    1°) inputfile est un nom part defaut? quelle que soit les classes que j'utilise j'utiliserai le mot clef inputfile ?

    Non, pas du tout, _inputFileName est probablement une variable définie quelque part ailleurs de type std::string.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string _inputFileName = "toto";
    Citation Envoyé par 21did21
    2°) _inputFileName.c_str() concernant le .c_str() je n'ai pas du tout compris a quoi cela sert, c'est pour eviter de marquer _inputFileName.txt ?
    c_str() est une fonction membre de la classe std::string. Elle permet de récupérer une chaine à la C (un char*) à partir de cette std::string. On a besoin de c_str() car le constructeur de ifstream n'est pas capable de prendre directement une std::string, il est limité au char*.

    Edit : Au fait pas besoin de repréciser que la stream doit être ouverte en lecture avec ios::in si tu utilises une ifstream (ifstream = input file stream)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Non, pas du tout, _inputFileName est probablement une variable définie quelque part ailleurs de type std::string.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string _inputFileName = "toto";
    en effet je ne l'avais pas vu, c'est pour cela que je ne comprennais pas ce code à present c'est bon

    Citation Envoyé par Arzar Voir le message
    c_str() est une fonction membre de la classe std::string. Elle permet de récupérer une chaine à la C (un char*) à partir de cette std::string. On a besoin de c_str() car le constructeur de ifstream n'est pas capable de prendre directement une std::string, il est limité au char*.
    c'est vraiment bizarre qu'on soit obligé de faire cela.... bref pas grave.
    donc a chaque fois que je dois ouvrir un fichier je devais mettre .c_str() àla fin du nom du fichier?

    Citation Envoyé par Arzar Voir le message
    Edit : Au fait pas besoin de repréciser que la stream doit être ouverte en lecture avec ios::in si tu utilises une ifstream (ifstream = input file stream)
    cela je vais le laisser comme cela car la personne qui programme avec moi à l'habitude de vers cela et je ne veux pas toucher sa partie de programme, merci quand meme


    merci de ton aide, car je trouve que c'est vraiment dur le C++

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par Arzar Voir le message
    c_str() est une fonction membre de la classe std::string. Elle permet de récupérer une chaine à la C (un char*) à partir de cette std::string. On a besoin de c_str() car le constructeur de ifstream n'est pas capable de prendre directement une std::string, il est limité au char*.
    je crois que j'avais mal compris, en fait quand je mets c_str() ca me permet de me parcourir mon fichier text mot par mot:

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    A::A(string _aName)
    {
       a.open(_aName.c_str(),ios::in);
     
        string command;
     
        while (!a.eof()) {
            a >> command;
            if(!a.eof()) {
                if(command=="bibi") A_0();
                if(command=="lolo") A_1();
                if(command=="mumu") A_2();
            }
        }
        a.close();
    }
    si je fais cela dans la boucle while je vais parcourir le fichier texte mot par mot ?

  5. #5
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Bonjour,

    Je ne sais pas sur quel tuto c++ tu es mais change au plus vite

    Avant de pouvoir comprendre exactement en détail, je te conseil la FAQ C++ sur les fichiers et FAQ C++ sur les chaines de caractère. Tu auras ainsi de plus solide base pour pouvoir comprendre et juger par ta même ce code.


    je crois que j'avais mal compris, en fait quand je mets c_str() ca me permet de me parcourir mon fichier text mot par mot
    En faite, pour faire court, en C et C++ tu utilise le type "char *" pour désigner une chaine de caractère. En C++, la philosophie est d'encapsuler, c'est à dire de rendre imperméable les données pour l'extérieur, tu ne pourrais pas accéder au attributs ( variables ) si la classe ne t'y autorise pas par divers moyen à ça disposition.

    Partant de là, la chaine de caractère, n'étant pas une chose simple à prendre en main, du moins le "char *", à été encapsuler dans un classe standard ( std:: ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #inculde <string> 
    std::string
    Certaine fonction du C++ veulent en paramètre une chaine de caractère mais comme tu as compris, il en existe donc "deux sortes" en C++, le "char *" et la std::string. Donc certaines fonction te demanderons un "char *" et d'autres des std::string.

    Et là pour passer de l'un à l'autre c'est simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //char * vers string
    std::string mastring("mon char*");
     
    //string vers char *
    const char * monCharEtoile = mastring.c_str();
    Tu remarqueras que la string te renvois un "const char*", d'où le c_str ( c = const, str = string au sens anglais "chaine" (char *).


    Ce n'est donc pas cette ligne qui fait que ton fichier est lu mot par mot car elle ne fais que transformer ta std::string en un "const char*". Mais l'operateur de lecture( operateur de flux) ">>", il te donne mot par mot, car son délimiteur naturel est l'espacement. Tu l'utilises une fois, un mot, deux fois, deuxième mot, etc...


    Je trouve que c'est vraiment dur le C++
    C'est comme si un geek ce mettais au sport, ça fais mal au début et après ça roule!
    Homer J. Simpson


  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    ok je comprends un peu mieux mais je commence à craquer j'en ai marre du C++
    ( surtout que je cherche à comprendre le code d'une personne et de le modifier et je pense que c'est bien plus dur que de faire le code à partir de 0)

    merci en tout cas pour votre aide tous et à bientot (car je pense avoir pas mal de question )

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

Discussions similaires

  1. Ouvrir un fichier texte dans WordPad
    Par Commodore dans le forum Langage
    Réponses: 5
    Dernier message: 15/06/2006, 11h32
  2. [VB6] Ouvrir un fichier text qui ce trouve sur internet!
    Par passicon dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 03/04/2006, 13h41
  3. Ouvrir un fichier texte
    Par Meno14 dans le forum Access
    Réponses: 5
    Dernier message: 28/03/2006, 17h37
  4. [C++] Menu d'aide: ouvrir un fichier texte
    Par debutanteVB.NET dans le forum C++
    Réponses: 11
    Dernier message: 15/12/2005, 23h12
  5. Ouvrir un fichier texte en lecture ET écriture
    Par Steph12 dans le forum C++
    Réponses: 12
    Dernier message: 17/06/2005, 08h08

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