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

SL & STL C++ Discussion :

[Ifstream] Lecture fichier et mémoire


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut [Ifstream] Lecture fichier et mémoire
    Voila, j'essaye de faire une lecture depuis un fichier, et de mettre les mots lus dans ce fichier dans la structure de donnée que manipule mon programme, ici un Vector.

    voici le code :
    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
     
    cout << "Restauration.\n" << endl;
    string nom_fichier;
    cout << "Saisissez le nom du fichier de restauration" << endl;
    cin.ignore( std::numeric_limits<streamsize>::max(), '\n' );
    getline(cin,nom_fichier);
    ifstream flux;
    char * buffer;
    long size;
    int ib=0;
    string snew;
    flux.open(nom_fichier.c_str(),ios::binary);
    flux.seekg(0,ifstream::end);
    size=flux.tellg();
    flux.seekg(0);
    if(flux.fail())
    {
    	cout << "Il y a une erreur à l'ouverture du fichier " << nom_fichier << ".\nIl est peut être introuvable ou indisponible." << endl;		
    }
    else
    {
    	buffer = new char [size];
    	flux.read (buffer,size);			 
    	while(ib<size)
    	{
    		s.append(""+buffer[ib]);
    		    ib++;
    	}
    	cout << "Rés = " << s << endl << endl;
    	delete[] buffer;
    }
    et voici le contenu du fichier texte que je veux lire (save.txt):
    coucou%ceci%est%un%TEST%d'écriture%en%entrée.%
    edit : vu les pb actuels, je n'ai pas mis la portion de code relative au découpage en mots.

    Voici une capture d'écran du programme au démarrage :


    Et voici le résultat d'une saisie n°4 : j'obtiens un affichage incohérent :



    A part le premier mot "coucou", qui est bien lu, le reste, je n'explique pas comment il a pu arriver là. Par ce que c'est du texte qui ne s'affiche que dans certaines portions de code du programme. Donc, ça voudrait dire que ces affichages sont des restes d'exécution précédentes, sans que j'ai pourtant fermé ma fenetre CMD à chq exécution... C'est à ni rien comprendre...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Par défaut
    Bonsoir,

    L'erreure vient du fait que tu utilises mal la fonction append, enfin tout dépend de ce que tu veux faire.

    Si avec ce append tu voulais mettre ce qui avait était lu dans ton buffer dans ta string alors tu pouvais la construire directement avec ton buffer comme paramètre.

    Sinon, a moins que je n'ai pas vu ce que tu voulais faire avec ta concaténation, il faut que tu passe par des strings afin que ta concaténation fonctionne.

    Après j'ai peut être mal interprété ce que tu voulais faire, dans ce cas la précise le qu'on puisse t'aider ^^

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut
    toute correction faite, j'utilisait la mauvaise string. s était une string que j'utilisais plus haut dans le switch (duquel fait partie le code montré ci dessous).
    En ayant mis la bonne string, snew, bah pour le coup, il affiche plus rien...

    le mot "" a été ajouté au dictionnaire
    le mot "" a été ajouté au dictionnaire
    ...
    "" signalant un espace

    Ce qui veut dire que pour lui, buffer[ib] est vide. Pourquoi???

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Par défaut
    essais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string snew(buffer);
    ca devrait afficher plus de choses :p.
    Sinon si tu veux t'emmerder encore avec le append alors fait:
    Euh aussi "" ne correspond pas un espace ^^" et si tu avais mis un espace ca voudrait dire qu'après chaque caractères de ton buffer tu sauterais une ligne ce qui donnerais quelque chose du genre:
    C
    O
    U
    C
    O
    U
    ...

    Les deux versions que je t'ai donné fonctionne j'ai testé chez moi avec ton code.

    Output:
    -------
    res = coucou%ceci%est%un%TEST%d'écriture%en%entrée.%

    voilà dit si tu as encore des pb ^^"

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut
    avec snew(buffer), ça marche pas.
    par contre, avec snew.append(1,buffer[ib]);, ça marche impec !
    et en plus, j'avais un mélange dans le nom de mes string, je n'appellait pas la bonne...
    Merci !

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

Discussions similaires

  1. ifstream lecture de fichier disparu
    Par Mizar75 dans le forum C++
    Réponses: 21
    Dernier message: 24/10/2007, 11h56
  2. ifstream lecture dans un fichier
    Par redkan dans le forum C++
    Réponses: 6
    Dernier message: 05/10/2007, 00h55
  3. Ifstream > Lecture d'un fichier > Format
    Par Zenol dans le forum SL & STL
    Réponses: 15
    Dernier message: 19/12/2005, 11h04
  4. Réponses: 4
    Dernier message: 04/11/2005, 09h04
  5. [ifstream] pb lecture fichier non sequentielle
    Par bludo dans le forum SL & STL
    Réponses: 3
    Dernier message: 10/02/2005, 21h30

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