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

MFC Discussion :

[C++.net]StreamReader


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Par défaut [C++.net]StreamReader
    Bonjour,

    voilà j'essaye de lire un fichier stream et j'aimerai que je StreamReader lise toutes mes lignes jusqu'au bout puis qu'il se fermer comment faire ?

    Quelle est la condition pour dire au StreamReader de s'arreter quand il arrive à la fin ?
    ou bien lui dire de s'arrêter lorsque la ligne qu'il lit est égale à "..." ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Par défaut
    Question conne !!

    la solution est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(sr->Read() != -1)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Par défaut
    Comment lui dire de s'arrêter de lire lorsqu'il renconter par exemple à une ligne le mot "FIN" ?

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    avec une condtion pour sortir de la boucle !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Par défaut
    nan parce que il y a un truc bizarre que je saisie pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    FileStream *fs;
    if(boitechargprojet->ShowDialog() == DialogResult::OK)
    {
    fs = new FileStream(boitechargprojet->FileName, FileMode::Open);
     StreamReader * sr = new  StreamReader(fs);
    while(sr->Read() !=-1)
    {
    MessageBox::Show(Convert::ToString(sr->ReadLine()));
    }
    }
     
    }
    Voici mon code.

    Dans le fichier la première ligne est "Unamed" mais quand je lis le fichier avec "sr->ReadLine()" il me lit "named" ????? sans le "U"
    Pourquoi ?

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    parce que tu t'en sers mal.

    sr->Read va faire déplacer le pointeur de fichier.

    Pourquoi ne pas lire tout le fichier dans un string, avec sr->ReadToEnd ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Par défaut
    j'avais remarquer cette méthode mais je sais pas comment m'en servir ?
    La fonction Read() ne retourne t-elle pas -1 lorsqu'elle arrive à la fin du fichier ?

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Pour utiliser sr->ReadToEnd, c'est pas compliqué, il suffit de l'appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maString = sr->ReadToEnd();

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Par défaut
    je vois toujours pas comment l'utiliser ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System::String *p = sr->ReadToEnd();
     while(p==false)
    ?????

    en gros voilà ce que j'essaye de faire

    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
    while(sr->ReadToEnd())
    			 {
    			 vig = new vignette;
    			 this->vig->setnom(Convert::ToString(sr->ReadLine()));
    			 this->vig->setCordX(Convert::ToInt16(sr->ReadLine()));
    			 this->vig->setCordY(Convert::ToInt16(sr->ReadLine()));
    			 this->vig->setDimHei(Convert::ToInt16(sr->ReadLine()));
    			 this->vig->setDimWid(Convert::ToInt16(sr->ReadLine()));
    			 this->vig->setFramedS(Convert::ToBoolean(sr->ReadLine()));
    			 this->vig->setFtop(Convert::ToInt16(sr->ReadLine()));
    			 this->vig->setFbot(Convert::ToInt16(sr->ReadLine()));
    			 this->vig->setFleft(Convert::ToInt16(sr->ReadLine()));
    			 this->vig->setFrig(Convert::ToInt16(sr->ReadLine()));
    			 this->vig->setUVFlip(Convert::ToBoolean(sr->ReadLine()));
    			 this->vig->setUVMiror(Convert::ToBoolean(sr->ReadLine()));
    }
    à chaque ligne correspond une propriété que j'affecte à mon objet vignette

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    en fait, je comprends pas ...

    sr->ReadToEnd, va tout te copier dans un string, donc, après, c'est le string qu'il faut manipuler.

    Ensuite, pour ton cas, tu as l'air d'avoir besoin de lire ligne par ligne. Pourquoi faire une boucle puisque tu déclines tout ce qu'il y a dans le fichier ?

    Pourquoi ne pas faire simplement
    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
     
              tmpString = sr->ReadToEnd();
              while(tmpString)
              {
              vig = new vignette;
              this->vig->setnom(Convert::ToString(tmpString));
              this->vig->setCordX(Convert::ToInt16(sr->ReadLine()));
              this->vig->setCordY(Convert::ToInt16(sr->ReadLine()));
              this->vig->setDimHei(Convert::ToInt16(sr->ReadLine()));
              this->vig->setDimWid(Convert::ToInt16(sr->ReadLine()));
              this->vig->setFramedS(Convert::ToBoolean(sr->ReadLine()));
              this->vig->setFtop(Convert::ToInt16(sr->ReadLine()));
              this->vig->setFbot(Convert::ToInt16(sr->ReadLine()));
              this->vig->setFleft(Convert::ToInt16(sr->ReadLine()));
              this->vig->setFrig(Convert::ToInt16(sr->ReadLine()));
              this->vig->setUVFlip(Convert::ToBoolean(sr->ReadLine()));
              this->vig->setUVMiror(Convert::ToBoolean(sr->ReadLine()));
              tmpString = sr->ReadToEnd();
    }
    N'hésite pas à mettre ton code entre try catch, la lecture de fichier, c'est capricieux

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Par défaut
    je essayer mais visiblement ça marche pas chez moi je vais essayer de t'expliquer un gros ce que je dois faire :

    1-j'ai sauver mon fichier (streamwriter) qui sauvegarde la position de mes vignettes(dérivé de panel avec des propriétés supplémentaire) et de l'image de fond de mon appli.
    Chaque panel a ses propres valeurs de propriétés
    "nom,CordX,CordY,DimHei,DimWid,FramedS,Fbot,Ftop,Fleft,Frig,UVflip,UVmiror"
    voila mon fichier :
    C:\Documents and Settings\kt13\Mes documents\imagexml\skinset-bos-heads-02.png
    Unamed
    4
    4
    50
    50
    False
    0
    0
    0
    0
    False
    False
    Unamed
    50
    50
    50
    50
    False
    0
    0
    0
    0
    False
    False
    Unamed
    100
    100
    50
    50
    False
    0
    0
    0
    0
    False
    False
    fin
    je veux donc lire le fichier jusqu'au bout afin de charger sur la tabpag mon image de fond avec les vignettes au même position qu'avant.
    chaque "Unamed" (qui représente le nom de la vignette) est un nouvelle objet vignette.

    J'aimerai donc connaitre la condition de fin de fichier ou lorsque je rencontre le mot "fin"

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ce que j'ai fait devrait marcher normalement

    à l'exception qu'il faut changer tmpString = sr->ReadToEnd(); par tmpString = sr->ReadLine();

    erreur de copier coller de ma part

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Par défaut
    Exact il falait changer par Readline();

    Tu me sauve encore une fois

    Merci !!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/01/2009, 14h43
  2. Réponses: 8
    Dernier message: 16/12/2007, 18h25
  3. [VB.NET] streamReader.read = double ?!?!
    Par Torkan dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/06/2006, 04h52
  4. [.net] streamreader, streamwriter
    Par noinneh dans le forum MFC
    Réponses: 3
    Dernier message: 10/03/2006, 14h39
  5. [vb.net][StreamReader] perte des accents
    Par arnolem dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/02/2006, 17h30

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