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 :

Lecture et déplacement dans un fichier


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire informatique
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Lecture et déplacement dans un fichier
    Bonjour,

    J'ai un petit soucie lors de ma lecture de fichier. Je souhaite pouvoir lire un entier dans mon fichier qui se trouve à la fin.
    J'ai donc utilisé la fonction ifstream pour ouvrir le fichier en lecture puis utilisé la fonction seekg() pour pouvoir lire à partir de la fin.
    Mon réel problème est de savoir à partir de où commencer la lecture (soit le premier paramètre de la fonction seekg() avec ios::end en second paramètre).

    Voiçi mon 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
    int main()
    {
    ifstream fichier("CATREL", ios::in ); // on ouvre en lecture
     
     
    if(fichier) // si l'ouverture a fonctionné
    {
    int entier1;
    fichier.seekg(87, ios::end);
     
    fichier>>entier1;	
    cout << entier1 << endl;
     
    fichier.close();
    }
    else
    cerr << "Impossible d'ouvrir le fichier !" << endl;
     
    system("pause");
    return 0;
    }
    J'ai pris le nombres de caractères en partant de la fin pour premier paramètre de ma fonction seekg() est-ce une erreur?

    J'ai en résultat :
    -858993460 (adresse mémoire?)

    et voici un exemple du fichier à lire :

    0411206 20053EUR2E9250114774662310712 310712PREL. FACTURATION 0000000000816O
    0711206 20053EUR2 92501147746 310712NOUVEAU SOLDE 0000002546949H
    0111206 20053EUR2 99861630874 300712 ** PAS DE MOUVEMENT CE JOUR ** 0000000000000{
    0711206 20053EUR2 99861630874 010812 ------------------------------ 0000000000000{

    La valeur en rouge est celle que je dois récupérer et comparer à la date système -1.

    Merci de vos réponses.

    Emilien.

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Bonjour Emilien

    Il semble que tu consultes un fichier texte ? La méthode que tu tentes n'est pas la meilleure qui soit. Utiliser une position absolue risque de te causer des ennuis et peut-être sensible à des variations très hasardeuses, notamment sur la gestion des sauts de ligne. A ta place, je m'y prendrais de la manière suivante :

    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
    #include <iostream>
    #include <fstream>
    #include <sstream>
     
    int main(int argc, char * argv[])
    {
      std::string number_str;
     
      std::ifstream file("file.txt");
      if(file) {
        // Get the last line
        std::string prev_last_line, last_line;
        while(std::getline(file,last_line)) {
          prev_last_line = last_line;
        }
        last_line = last_line.size() ?  last_line : prev_last_line; // Manage the case of a std::endl at the end of the file
     
        // Get the 4th field (the number we are looking for)
        std::istringstream last_line_stream(last_line);
        for(int i=0;i < 4;i++) {
          std::getline(last_line_stream,number_str,' ');
        }
      }
     
      std::cout << number_str << std::endl;
      return 0;
    }
    Tu découpes le fichier en lignes, puis tu traites la dernière en la découpant selon les espaces. Il est possible de faire des analyses plus poussées sur les chaînes de caractères avec des regexp, mais une solution simple comme celle-ci peut te suffire. De cette manière, si le format d'un des champs change, ton code fonctionnera toujours.

    Ce n'est pas une très bonne idée de convertir ta date en nombre entier, car elle semble avoir un format JJMMAA.
    Find me on github

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire informatique
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Déjà je te remercie d'avoir pris du temps pour examiner mon problème.

    Il ne s'agit pas d'un fichier texte mais d'un fichier .OUT cela change t'il quelque chose ? Il s'agit de fichiers retournés par nos banques et ils sont différents en fonction des banques (des fois il n'y a pas d'espaces entre certains caractères ou des fichiers sur une seule et même ligne)... De plus il y a plusieurs espaces qui séparent les éléments de mon fichier (ils ne s'affichent pas sur le post).

    J'ai essayé ton code et je n'ai rien qui s'affiche à l'écran (sur un de mes fichiers avec des sauts de ligne et espaces entre les éléments)

    Je pense que cela va être dur de mettre en place vu tout ce qu'il y a à prendre en compte..

    Cdt,

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Dans ce cas, il te faudrait peut-être une configuration par banque pour savoir comment découper les fichiers.

    Autrement, tu peux infliger un prétraitement aux fichiers reçus pour tous les formater de la même manière. (petit script sed?)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Est-ce que ces fichiers ont été conçus pour être conçu pour être traité informatiquement ??
    Sérieusement le formatage n'est pas le plus approprié au contraire...

    J'espère que tous ces formats sont tout de même prévu pour être traité de la même manière.


    Voici ce que je te proposerais, théoriquement ceci devrait marcher même si tout est sur une ligne, si les espaces séparent les champs, s'il y en a plusieurs, etc... :
    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
     
    struct Operation
    {
               int numCompte;
               float somme;
               int quelqueChose;
               int jeSaisPas;
               std::string nomitation; 
               int autreChose;
     
    };
    // Il me semble que ifstream hérite de ostream, dans le cas contraire, 
    std::istream & operator>>(std::istream & entre, Operation & sortie)
    {
              std::string tmp;
              entre >> sortie.numCompte >> sortie.somme >> tmp;
              int centime;
              entre >> centime;
              sortie.somme += centime(float)/100;
              entre >> sortie.quelqueChose;
              entre >> sortie.jeSaisPas;
              sortie.nomination = "";
              char lu;
               entre.read(&lu, 1);
              while(lu < '0' || lu > '9')
              {
                        sortie.nomination += lu;
                         entre.read(&lu, 1);
               }
               //là tu peux supprimer les caractère au début et à la fin de ton std::string avec erase en parcourant ta string avec les itérateur et reverse_iterator jusqu'à trouver un caractère alphanumérique.
               entre.putback(lu);
               entre >> sortie.autreChose;
    }
     
    ifstream fichier("CATREL", ios::in );
    while(onAPasAtteindsLaLigneDesirée)
              fichier >> operation;

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire informatique
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci de vos réponses, je pense m'être lancé dans quelque chose de difficile ^^.
    Oui les fichiers sont destinés à un traitement informatique, ils sont intégrés à notre ERP.

    Le programme ne compile pas Neckara :
    error C4716: 'operator>>' : doit retourner une valeur

    J'ai peut être oublié de corriger quelque chose mais je ne vois pas :S

    Cdt,

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par draithor Voir le message
    Oui les fichiers sont destinés à un traitement informatique
    J'aimerais bien dire 2 mots à la personne qui a décidé d'utiliser ce formatage

    Citation Envoyé par draithor Voir le message
    Le programme ne compile pas Neckara :
    error C4716: 'operator>>' : doit retourner une valeur

    J'ai peut être oublié de corriger quelque chose mais je ne vois pas :S

    Cdt,
    Dans la fonction std::istream & operator>>(std::istream & entre, Operation & sortie) j'ai oublié de retourner return entre à la ligne 32/33.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire informatique
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Il y a une boucle infinie dans ton while Neckara :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while(lu < '0' || lu > '9')
    {
        sortie.nomination += lu;
        entre.read(&lu, 1);
        cout << "test5" << endl;
    }
    N'ayant rien à l'écran je me suis permis de mettre des cout un peu partout et j'ai remarqué que le "test5" tourne à l'infinie dans la console.

    Cordialement,

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Je pense savoir pourquoi, read doit placer un '\0' final.

    Il faudrait alors faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char lu[2];
    while(*lu < '0' || *lu > '9')
    {
    sortie.nomination += lu;
    entre.read(&lu, 2);
    cout << "test5" << endl;
    }

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire informatique
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Ca ne compile pas.. :S

    Error: l'argument de type "char (*)[2]" est incompatible avec le paramètre de type "char *"

    Le passage par référence de "lu" ne marche pas on dirait. (tilde rouge sous &lu)

  11. #11
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Bonjour,

    Procurez-vous les specs de ce flux, ou bien donnez un exemple plus complet.
    L'exemple que vous donnez ressemble à de la colonne fixe, et dans ce cas il serait inutile de se compliquer la vie.
    Ça sert à rien de partir tête baissée en considérant que le séparateur de colonne est l'espace alors que la 1ère ligne montre un contre exemple, et la 2ème ligne semble accoler date et libellé sans séparateur.

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Oui, c'est le matin, j'ai oublié de rectifier une ligne :

    Après, vous devriez être capable de corriger vous même ces simples erreurs en vous fiant au message du compilateur.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire informatique
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Hibernatus34 Voir le message
    Bonjour,

    Procurez-vous les specs de ce flux, ou bien donnez un exemple plus complet.
    L'exemple que vous donnez ressemble à de la colonne fixe, et dans ce cas il serait inutile de se compliquer la vie.
    Ça sert à rien de partir tête baissée en considérant que le séparateur de colonne est l'espace alors que la 1ère ligne montre un contre exemple, et la 2ème ligne semble accoler date et libellé sans séparateur.
    Bonjour,

    La demande des specs de ces flux (oui il y a plusieurs banques et je pense plusieurs flux différents) a déjà été demandé mais toujours rien en retour. Il s'agit, si vous ne l'avez pas remarqué, de fichiers concernant des flux bancaires et personne (au sein des employés concernés) ne peut me dire si ils sont sensibles ou pas.. Je vais donc faire mon possible pour avoir d'autres informations concernant ces fichiers (ce qui risque d'être dur pour le moment car beaucoup de personnes sont en congés, dont les Chefs). Voila pourquoi mon exemple ne cite qu'une partie du fichier. Un contre exemple ? Je me suis avancé sur le fait que les différentes chaînes de caractères étaient séparées par plusieurs espaces. En aucun cas qu'elles étaient uniformes..

    Citation Envoyé par Neckara Voir le message
    Oui, c'est le matin, j'ai oublié de rectifier une ligne :

    Après, vous devriez être capable de corriger vous même ces simples erreurs en vous fiant au message du compilateur.

    Je tiens à préciser que cette "simple erreur" là en question (et d'autres d'ailleurs) a été corrigé avant que je n'écrive mon dernier post et que si vous le relisez l'erreur vient du passage par référence de la variable dans la méthode read() et non pas de mon oublie de rajouter le &. Je ne suis pas expert en développement mais de la à me prendre pour un noeudnoeud non merci. J'ai déjà eu du mal à me convaincre à poster mon problème sur le forum ne me faites pas culpabiliser

  14. #14
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par draithor Voir le message
    et que si vous le relisez l'erreur vient du passage par référence de la variable dans la méthode read() et non pas de mon oublie de rajouter le &.
    Je n'ai jamais dit qu'il fallait rajouter le '&' mais qu'il fallait l'enlever.
    D'ailleurs je crois que vous n'avez pas bien compris le passage par référence.
    Dans la méthode read, la variable est transmise par pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void fonction(Type *)
    {
     
    }
     
    Type x;
    fonction(&x);
    Le passage par référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void fonction(Type &)
    {
     
    }
    Type x;
    fonction(x);
    Citation Envoyé par draithor Voir le message
    Je ne suis pas expert en développement mais de la à me prendre pour un noeudnoeud non merci. J'ai déjà eu du mal à me convaincre à poster mon problème sur le forum ne me faites pas culpabiliser
    Loin de moi de vous prendre pour un "noeudnoeud" au contraire, je considérais que vous étiez capable de trouver et corriger vous même l'erreur plutôt que de reposter ici le message d'erreur du compilateur.

  15. #15
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Citation Envoyé par draithor Voir le message
    Un contre exemple ? Je me suis avancé sur le fait que les différentes chaînes de caractères étaient séparées par plusieurs espaces. En aucun cas qu'elles étaient uniformes..
    C'est vrai que la ligne commençant par 04 est visiblement dans un autre format que les autres (01 et 07), mais elle contient des données identiques au début, suivies d'un espace dans un cas et pas dans l'autre (je parle de EUR2).
    Donc, sauf coïncidence exceptionnelle, c'est bien un contre-exemple.

    Ensuite, comme j'ai vu passer beaucoup de flux de ce type (pour la grande distribution, mais c'est le même genre), j'ai tendance à penser que c'est de la colonne fixe, parce qu'on a eu des flux générés par des programmes AS/400, et ceux-ci ont tendance à rajouter des espaces inutiles au début des valeurs numériques. C'est spécifique à certaines fonctions standard d'exportation de données. Et les fichiers que je vois passer ressemblent beaucoup aux vôtres, notamment avec ce "{" dont on se demande ce qu'il fait là (peut-être une mauvaise conversion EBCDIC -> ASCII). Historiquement, il y a des chances pour que vos flux aient hérité de ce genre de choses également.

    Quand je vois "20053EUR2E9250114774662310712" d'un trait d'un seul, je doute très fortement que ça soit un format avec séparateur.

    A votre place je tannerais tout le monde jusqu'à obtenir les specs, un exemple d'appli, ou des exemples de flux plus parlants.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire informatique
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Loin de moi de vous prendre pour un "noeudnoeud" au contraire, je considérais que vous étiez capable de trouver et corriger vous même l'erreur plutôt que de reposter ici le message d'erreur du compilateur.
    Bonjour,

    Autant pour moi l'erreur venait du "entre.putback(lu);" qui avec ou sans le & ne compile pas et si j'ai bien compris putback() prend un char en paramètre (donc logiquement un &). Mais bon n'étant pas important pour moi pour l'instant (du moins je pense ^^) je l'ai mis en commentaire pour le moment. Cela dit, j'ai tjrs ma boucle infinie dans le while

    En tout cas merci de votre investissement

    Citation Envoyé par Hibernatus34 Voir le message
    A votre place je tannerais tout le monde jusqu'à obtenir les specs, un exemple d'appli, ou des exemples de flux plus parlants.
    J'y compte bien ! Je peux, si vous le souhaitez, vous envoyer par mail deux fichiers complets comme exemple.

  17. #17
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Pour la boucle infinie, il faudrait remplacer le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << "test5" << endl;
    par :
    et me montrer la ligne traitée.

    Peux-tu prendre la ligne où tu as la boucle infinie, changer les valeurs et nous montrer tout cela (ainsi il ne devrait pas y avoir de problèmes d'informations sensibles).

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire informatique
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 5
    Points
    5
    Par défaut


    Voilà, et je n'ai rien de telle dans mon fichier ^^

  19. #19
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    J'ai fais quelques tests, read ne rajoute pas de '\0' donc la première version était juste. Mais c'est très étonnant qu'il t'ai fait une boucle infinie.

    Voici un petit test que j'ai fait :
    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
    using namespace std;
     
    #include <iostream>
    #include <string>
     
     
    int main(void)
    {
        char lu[3];
        lu[1] = '1';
        lu[2] = 0;
        while(*lu < '0' || *lu > '9')
        {
            std::cin.read(lu, 1);
            cout << lu << endl;
        }
        return 0;
    }
    Est-ce que les champs précédant ont les bonnes valeurs ?
    Il faudrait que tu fasse un std::cout à chaque attribut de la variable 'sortie'.

  20. #20
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Bonjour,

    Pour info, dans les 2 fichiers que j'ai reçus en privé, on voit clairement que c'est de la colonne fixe, toutes les lignes font la même taille et sont parfaitement alignées.
    Donc au final, un line.substr(11, 6) c'est mieux que de parser.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Lecture et déplacement dans un fichier
    Par draithor dans le forum C++/CLI
    Réponses: 2
    Dernier message: 30/08/2012, 16h19
  2. Réponses: 4
    Dernier message: 19/05/2006, 17h06
  3. lecture d'éléments dans mon fichier
    Par gillou4 dans le forum C
    Réponses: 9
    Dernier message: 23/10/2005, 16h19
  4. Problème lecture de nombre dans un fichier en c++
    Par knecmotet dans le forum C++
    Réponses: 1
    Dernier message: 28/10/2004, 15h48
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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