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 :

Enregistrement dans un fichier texte


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut Enregistrement dans un fichier texte
    Bonjour, je sais le titre n'est pas très explicite, mais je ne savais pas trop quoi mettre pour résumer mon problème.
    Voila, j'ai une chaine de caractère que j'entre dans un fichier texte, le problème c'est que, quand je récupère cette chaine en lisant le fichier, ce n'est pas la même que quand je l'ai entré.
    Je m'explique: j'entre une chaine de caractère (contenue dans un tableau de char) dans mon fichier. Si on ajoute chaque caractères entre eux, on obtient 6522. Quand je lit ce fichier et que je fait l'opération inverse, le programme me renvoie 6498. Logiquement, des caractères sont perdus dans la lecture ou dans l'écriture du fichier. Serais-ce l'opérateur >> qui pose problème (les caractères que je rentre sont compris entre 0 et 255 en omettant les caractères n°0, 7, 8, 9, 10, 13 et 32) ?

    Merci.

    Simac

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    un peu de code serait plus efficace qu'une explication peu claire.
    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 du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Effectivement, excusez-moi

    Voila le code qui écrit dans le fichier texte et me renvoi 6522 grâce à un MessageBox:

    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
    unsigned char chaineCode[7000];
    ofstream FichierSortie("utilitaire.txt", ios::trunc);
    int nbenTout=0;
     
    /* Ici, la partie qui s'occupe de créer la chaine de caractère aléatoirement (pour ne pas surcharger 
     
    le code, je la met tout en bas)*/
     
    FichierSortie<<chaineCode;
    int i=0;
    while(chaineCode[i]!='\0')
    {
        nbEnTout+=chaineCode[i];//ajoute chaque caractères
        i++;
    }
    ostringstream oss;// créer un flux de sortie
    oss << nbEnTout;// écrire une chaine de caractère dans le flux
    oss << " ";
    oss << i;
    string nbEnToutChar = oss.str();// récupérer une chaîne de caractères
    MessageBox(0,nbEnToutChar.c_str(),"doit être 6522",0);
    Le fichier texte contient maintenant:

    ƒi~ØEÏ5az=ùß%òç°¾E×L¾3‹WÍ$`ìæËN*F„u825w.*ÁRozŸB

    Et voici le code qui lit le fichier texte et devrait me renvoyer 6522 (code complet):

    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
    #include <fstream.h>
    #include <iomanip.h>
     
    using namespace std;
    int main(void)
    {
        ifstream FichierEntrer("utilitaire.txt");
        unsigned char chr[7000];
        FichierEntrer>>chr;
        FichierEntrer.close();
        int i=0;
        long int nb=0;
        while (chr[i]!='\0')
    	{
    	    nb+=chr[i];//ajoute chaque caractères
    	    cout<<i<<"    "<<nb<<"    "<<chr[i]<<"    "<<(int)chr[i]<<endl; //affiche le nombre de 
     
    boucle
    effectué (i),le numéro du caractère (nb) et le caractère (chr[i])//
    	    i++;
        }
        cout<<"nb="<<nb<<endl;  //devrait renvoyer 6522
     
        system("pause");
        return 0;
    }


    Partie qui crée aléatoirement la chaine de caractère

    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
    int nbEnTout=6522; //initialisation du nombre de boucles
    int nbHasard=0;
    unsigned char chaineCode[7000];
    int i=0;
    while (nbEnTout>0)
    {
        if (nbEnTout>255)
        {
            do
    	{
    	    nbHasard=(rand() % 255); //on tire un nombre entre 0 et 255
    	    }while(nbHasard==0 || nbHasard==7 || nbHasard==8 || nbHasard==9 || nbHasard==10 || 
     
    nbHasard==13 || nbHasard==32); //si nbHasard est égale à l'un de ses nombre on retire
    	}
        else
        {
            do
    	{
    	    nbHasard=(rand() % nbEnTout+1); //on tire un nombre entre 0 et nbEnTout
    	}while(nbHasard==0 || nbHasard==7 || nbHasard==8 || nbHasard==9 || nbHasard==10 || 
     
    nbHasard==13 || nbHasard==32);
        }
        chaineCode[i]=nbHasard;
        nbEnTout-=nbHasard;
        i++;	
    }
    Voila, tout devrait marcher, mais j'ai dû faire une erreur (que je n'arrive toujours pas à trouver).

    Je pense qu'il y a un caractère qui n'est pas pris en compte par l'oppérateur << ou >>, mais je ne

    vois pas lequel.

    Merci.
    Simac

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Quand un fichier 'nest pas ouvert en mode binaire, les caractères de fin de ligne sont interprétés, selon la mode naturelle de l'OS. Peut-être qu'on l'ouvrant en binaire, ça ira mieux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ifstream FichierEntrer("utilitaire.txt", ios::binary);
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Merci !!! Maintenant ça marche

    En mettant , une grande partie du problème est résolu !!
    Ensuite, je n'ai eu plus qu'a supprimer les caractères n°11 et 12 qui n'étaient pas lut par >>, et j'ai fait une boucle qui me retirai les caractère, si jamais je ne tombais pas sur le bon nombre à la fin.

    Merci encore à vous!

    Simac

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 28/03/2010, 12h30
  2. Enregistrer dans un fichier text
    Par elhani dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/07/2009, 12h35
  3. Modifier un enregistrement dans un fichier texte
    Par Ludo75 dans le forum Langage
    Réponses: 4
    Dernier message: 10/05/2008, 00h05

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