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 :

affichage d'un fichier


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut affichage d'un fichier
    bonjours, voilà mon probleme: j'ai crée une petite fonction qui à pour rôle d'afficher les login et password qui se trouvent dans un fichier sous cette forme:
    login|password
    login2|password2
    mon probleme est que ça ne m'affiche pas du tout ce que je souhaite...

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    using namespace std;
    bool loadAdmin()
    {
        string data;
        char stop = 124; // correspond au code ASCII de ce caractère "|"
        char impair=true;
        ifstream file("Data/player/admin.txt", ios::in);
        if (file == false)
        {
            cout << "! echec de l'ouverture du fichier" << endl;
        }
        else
        while (getline(file,data))
        {
            if(impair == true)
            {
                getline(file, data, stop);
                cout << data;
                impair=false;
            }
            if(impair == false)
            {
                getline(file, data);
                cout << " "+data << endl;
                impair=true;
            }
        }
        file.close();
        cout << " chargement de la liste des administrateurs effectuee!" << endl;
        return true;
    }

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 29
    Par défaut
    Déjà, je vois 4 problèmes dans ton code ...

    1) Évite de mettre des valeurs numérique à des "char"
    2) Ensuite, c'est quoi cette valeur booléenne à un char ?
    3) Met des parenthèses à ton bloc else, parce du coup, si l'ouverture ne réussi pas, il va t'afficher que ça n'a pas réussi et après que ça a réussi...
    4) Pourquoi tu mes une valeur de retour si elle sera toujours vrai ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Par défaut Lecture dans un fichier
    Bonjour,

    Je pense que tu as commis une erreur dans l'utilisation de la fonction getline.
    Il faut que tu récupère tout d'abord une ligne:

    string line;
    while (getline(file,line)) {

    ensuite tu peux stocker le contenu de ta ligne dans un flux stringstream afin de pouvoir travailler dessus:

    stringstream ss;
    ss << line;

    pour récupérer le nom et le mdp, tu utilises ta fonction getline deux fois:
    string nom, mdp;
    getline(ss, nom, '|');
    getline(ss, mdp, '|');

    Tu réalise cette opération autant de fois que cela est nécéssaire.

    ++

  4. #4
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Deux autres remarques…

    Tu commences par lire une ligne de ton fichier au début de la boucle « while », pour vérifier que le flux est toujours valide.
    Sauf que tu n'en fais rien !
    Du coup, tu perds une ligne à chaque itération…

    Ensuite, ton « booléen »…
    Tu l'initialises à « true ». Soit.
    Au début de la boucle « while », on teste s'il vaut « true » ; comme c'est le cas, on rentre dans le bloc « if », et à la fin on lui affecte « false ».
    Deuxième test de la boucle, on vérifie s'il vaut « false » ; c'est le cas, alors on rentre dans le bloc « if », et à la fin on lui affecte « true ».
    Fin de la boucle, itération suivante.
    On teste s'il vaut « true »…

    Au final, on rentre systématiquement dans tous les blocs « if » de la boucle.
    Donc ces tests sont inutiles.
    Mais alors, quelle est l'utilité de ce « booléen » ?

    PS: Puisque toutes les lignes ont un format et un nombre de tokens bien définis, tu n'es pas obligé de passer par un std::stringstream pour analyser le contenu des lignes.
    Mais dans le cas général, c'est la bonne méthode.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    @terry
    1) Évite de mettre des valeurs numérique à des "char"
    Le compilateur, ne voulais pas prendre en compte char stop "|"; j'ai donc donc du le remplacer par sa valeur ASCII

    2) Ensuite, c'est quoi cette valeur booléenne à un char ?
    Une erreur de ma part, je voulais effectivement mettre bool, mais pour je ne sais quel raison j'ai mit char.

    3) Met des parenthèses à ton bloc else, parce du coup, si l'ouverture ne réussi pas, il va t'afficher que ça n'a pas réussi et après que ça a réussi...
    Un simple et bette oublie... honte à moi

    4) Pourquoi tu mes une valeur de retour si elle sera toujours vrai ?
    ça s'est temporaire, c'était pour les test, mais ça va viré, et être remplacer dès lors que le chargement des infos du fichier sera correctement mit en place.


    @steph:
    la variable impair joue un rôle important, cela peut semblé inutile au premier regard, mais son rôle est réel:
    la première fois dans la boucle while, impaire vaut true, et donc on rentre dans le premier if, ici on utiliser getline(file, data, stop), donc on enregistrera dans data les information du début du fichier jusqu'au caractère stop qui ici est "|" ==> donc on lit le login. puis impair vaut false
    donc la seconde fois dans la boucle while, on entre dans le seconde if, et ici on ne li pas jusqu'au caractère stop, mais jusqu'au caractère "/n" fin de ligne. grace à getline(file, data) (remarque, il n'y a pas de 3eme paramètre, donc la lecture se fin jusqu'à la fin de ligne) ==> donc on li le mot de pass.
    sinon je vois ce que tu veut dire. on li le premier et ensuite le second...oui j'ai effectivement zaper ça...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    stringstream ss=line; //error, std::stringstream has initializer but incomplete type

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/01/2006, 21h10
  2. Script permettant l'affichage d'un fichier via onmouseover
    Par HNT dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/10/2005, 22h58
  3. Affichage d'un fichier graphique (GIF, BMP,...)
    Par tonycalv dans le forum MFC
    Réponses: 2
    Dernier message: 12/09/2005, 07h26
  4. Formater l'affichage d'un fichier
    Par devdev2003 dans le forum Linux
    Réponses: 3
    Dernier message: 28/06/2005, 17h47
  5. Optimiser l'affichage d'un fichier XML de grosse taille...
    Par UnPeuPerdu dans le forum XML/XSL et SOAP
    Réponses: 11
    Dernier message: 03/06/2004, 16h01

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