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 :

probleme lecture fichier


Sujet :

C++

  1. #1
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut probleme lecture fichier
    bonsoir

    alors j'essaie de lire un a un les ligne d'un fichier et de les afficher pour cela j'utilise un getline et affiche ma ligne contenant le l ligne mais celui ci me renvoie la moitier de la ligne donc est ce normal ? je tien a preciser que je n'ai pas mis de delim donc logiquement celle ci devrais etre lu jusqu'au retour chariot ( '\n') 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
     string contenue;
        getline(ifs, contenue);
        cout << contenue << endl;
        ifs.seekg(1, ios::cur);
        getline(ifs, contenue);
        cout << contenue << endl;
        for(size_t y = 0; y <= rows; ++y)
        {
            for(size_t x = 0; x <= cols; ++x)
            {
               char c;
               ifs>>c;
               Map.tiles.push_back(c);
               //cout << c << endl;
               //cout << c << " " << y << " " << x <<endl;
            }
            ifs.seekg(1, ios::cur);
            getline(ifs, contenue);
            cout << contenue <<endl;
        }
    ne le tester pas car il manque une partie du code j'ai extrait le plus important

    edit :

    probleme non résolu mais un debut de piste le ifs.seekg() est la cause pour laquel la ligne n'est reçu ps entierement maintenant probleme et que ifs.seekg() est la pour justement pouvoir se deplacer donc voila

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Peut-on savoir ce que tu espères et attends comme résultat avec tes seekg ?!
    Sais-tu à quoi il sert ?
    getline déplace déjà le curseur interne au fichier..
    http://www.cplusplus.com/reference/s...tring/getline/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Alors avec mes seekg j'attend qu'il se déplace d'une ligne après la position actuelle donc en gros qu'il passe a la ligne suivante. et oui je sais à peu près à quoi il sert il sert au déplacement du fichier j'ai regardé hier sur les sites que tu mas donné.

    getline déplace le curseur je sais j'ai regardé aussi mais qu'il va à la ligne que quand il est dans un while sinon il ne va pas à la ligne

    edit : bon bah problème en partie résolu c'est bien le seekg qui bloquait le tout un simple getline() passez a la ligne même sans while enfin aujourd'hui ça marche

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Le premier paramètre de seekg est un offset, et certainement pas un nombre de lignes.
    Faut-il rappeler que la notion de lignes dans un fichier n'existe pas pour la machine ? Il s'agit juste de la représentation qui est faîte dans les logiciels.

    Ton seekg il... décalle le curseur de lecture sur... le caractère suivant.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    bon alors voila mes codes

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    #include <fstream>
    #include <iostream>
    #include <vector>
    #include <string>
    #include "position.h"
     
    using namespace std;
     
    struct SWrap {
    	/*ici les coord de départ sur la map courante*/
    	int sourceX;
    	int sourceY;
    	/*ici, l'identification de la map de sortie: nom, coordonnées, etc.*/
    	int destMapX;
    	int destMapY;
    	/*ici les coordonnees d'arrive sur la map de sortie*/
    	int destX;
    	int destY;
    };
     
    struct SMap {
            size_t rows;
            size_t cols;
    	std::vector<unsigned char> tiles;
    	std::vector<SWrap> wraps;
    	std::string title;
            /* et, comme on peut travailler en orienté objets, on peut rajouter
             * une fonction membre qui renvoie le caractère qui se trouve en X,Y ;)
             */
           const unsigned char tileAt(size_t x, size_t y) const
           {return tiles[y*cols + x];}
           /* et la même chose avec une Position (sait on jamais ;)) */
           const unsigned char tileAt(Position const & pos)
           {return tileAt(pos.x(), pos.y());}
    };
     
    int main()
    {
        ifstream ifs("ephinea.txt");
        SMap Map;
        Map.tiles.clear(); //supprime les informations de la map précédante
        Map.wraps.clear();
        size_t rows;
        size_t cols;
        string contenue;
        ifs>>rows>>cols;
        cout << rows << " " << cols << endl;
        getline(ifs, contenue);
        cout << contenue << endl;
        //char a;
        //ifs>>a;
        //cout << a << endl;
         for(size_t y = 0; y < rows; ++y)
        {
            //char a;
            //ifs>>a;
            //cout << a << endl;
            for(size_t x = 0; x < cols; ++x)
            {
               char c;
               ifs>>c;
               cout << c << endl;
               Map.tiles.push_back(c);
            }
            getline(ifs, contenue);
        }
        int wrapCount;
        ifs>>wrapCount;
        cout << wrapCount << endl;
         for(int i = 0; i< wrapCount;++i)
        {
             SWrap wrap;
             ifs>>wrap.sourceX>>wrap.sourceY
                >>wrap.destMapX>>wrap.destMapY
                >>wrap.destX>>wrap.destY;
            Map.wraps.push_back(wrap);
        }
        ifs>>Map.title;
        cout << Map.title << endl;
    }
    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
    #ifndef POSITION_H_INCLUDED
    #define POSITION_H_INCLUDED
     
     
    class Position
    {
        public:
            Position(int x, int y):x_(x), y_(y){}
            int x() const{return x_;}
            int y() const{return y_;}
        private:
            int x_;
            int y_;
    };
     
     
    #endif // POSITION_H_INCLUDED
    alors j'ai un probleme que j'ai localiser avec une batterie de test mais ce probleme je n'arrive pas a y remedier le probleme ce situe a ce niveau la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      for(size_t y = 0; y < rows; ++y)
        {
            //char a;
            //ifs>>a;
            //cout << a << endl;
            for(size_t x = 0; x < cols; ++x)
            {
               char c;
               ifs>>c;
               cout << c << endl;
               Map.tiles.push_back(c);
            }
            getline(ifs, contenue);
        }
    si on enleve la deuxieme boucle il lis bien et le reste du programme ce deroule comme voulu mais si on la laisse ce qui est totalement indispensable pour lire tout les caractere du fichier il merde et n'initialise pas bien les caractere puis le reste du programme foire car il n'est pas a la bonne place pour lire les autres informations plus tard donc ma question est la suivante :

    pourquoi la deuxieme boucle bloque tout alors qu'elle est me semble t'il bonne ?

    edit:

    alors voila en testant avec un tellg() bien placé il semblerai que celui ci renvoi cela
    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
    15 30
     
    24octet
    55octet
    489octet
    -1octet
    -1octet
    -1octet
    -1octet
    -1octet
    -1octet
    -1octet
    -1octet
    -1octet
    -1octet
    -1octet
    -1octet
    1962741252
    terminate called after throwing an instance of 'std::bad_alloc'
      what():  std::bad_alloc
     
    This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information.
     
    Process returned 255 (0xFF)   execution time : 139.463 s
    Press any key to continue.
    comme vous pouvez voir il passe de 55 octet a 489 donc beaucoup trop d'une maniere logique il devrai passer a 86 octet car c'est des caractere donc 1 octet et qu'il y a 30 caractere donc je planche toujour dessus si quelqu'un a une supposition bah faite la paraitre
    Fichiers attachés Fichiers attachés

  6. #6
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Problème résolu le problème était qu'il ne prenait pas les espaces comme un caractère donc il sautait toute les lignes.

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

Discussions similaires

  1. [VB]Probleme lecture fichier text et affichage
    Par clochardevobsy dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/03/2006, 08h46
  2. Probleme lecture fichier acces sequentiel
    Par ouar dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/09/2005, 13h39
  3. Probleme lecture fichier
    Par CaptainChoc dans le forum C++
    Réponses: 5
    Dernier message: 06/03/2005, 10h40
  4. [LG]probleme lecture fichier
    Par yp036871 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2004, 19h22
  5. [LG]Probleme lecture fichier file of ....
    Par John_win dans le forum Langage
    Réponses: 11
    Dernier message: 11/11/2003, 18h53

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