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 :

Accès direct fichier


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut Accès direct fichier
    Bonjour, je crée un programme pour écrire et lire un fichier. Je voudrais que celui-ci puisse afficher une ligne par accès direct mais je n'y parvient pas. Voilà 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
    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
    struct mesure
    {
            char nom[20];
            char reference[15];
            double resultat;
            void saisie();
            void affiche();
            void rang();
    };
     
    void mesure::saisie()
    {
            ofstream fichierOut("mesures.txt", ios::app);
            cout<<"Donnez le nom de la mesure : ";
            cin>>nom;
            fichierOut << "nom : " << nom;
            cout<<"Donnez la reference : ";
            cin>>reference;
            fichierOut << ", reference : " << reference;
            cout<<"Donnez le resultat de la mesure : ";
            cin>>resultat;
            fichierOut << ", resultat : " << resultat << "\n";
            fichierOut.close();
    }
     
    void mesure::affiche()
    {
         string line;         
         char recherche[256];          
         ifstream fichierIn("mesures.txt");
         cout << "nom de la mesure recherche : ";
         cin >> recherche;
         fichierIn.seekg(0,ios::beg);
         while(! fichierIn.eof() )
         {
                   getline(fichierIn, line);           
     
                   if(line.find(recherche)==0)
                   {
                                              cout<< line << "\n" << endl;
                   }
     
         }
         fichierIn.close();
    }
     
    void mesure::rang()
    {
         string line;
         double rang;
         ifstream fichierIn("mesures.txt");
         cout << "rang de la mesure recherche : ";
         cin >> rang;
         fichierIn.seekg(sizeof(*nom)+sizeof(*reference)+sizeof(resultat)* rang, ios::beg);
         getline(fichierIn, line);
         cout << line << "\n" << endl;
     
         fichierIn.close();
    }
    C'est dans la partie rang() que j'ai un soucis. Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(*nom)+sizeof(*reference)+sizeof(resultat)* rang, ios::beg
    ça ne peut pas marcher, ni nom, ni rang, ni résultat ne sont connus.
    il faut plutot écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(mesure.nom)+sizeof(mesure.reference)+sizeof(mesure.resultat)* rang, ios::beg
    ou remplacer par le nom des types.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    Ca ne fonctionne toujours pas voilà ce que ça m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    main.cpp: In member function `void mesure::rang()':
    main.cpp:60: error: expected primary-expression before '.' token
    main.cpp:60: error: expected primary-expression before '.' token
    main.cpp:60: error: expected primary-expression before '.' token
     
    make.exe: *** [main.o] Error 1

  4. #4
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par bibeul Voir le message
    Ca ne fonctionne toujours pas voilà ce que ça m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    main.cpp: In member function `void mesure::rang()':
    main.cpp:60: error: expected primary-expression before '.' token
    main.cpp:60: error: expected primary-expression before '.' token
    main.cpp:60: error: expected primary-expression before '.' token
     
    make.exe: *** [main.o] Error 1
    oups, erreur de ma part, il faut marquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(mesure::nom)+sizeof(mesure::reference)+sizeof(mesure::resultat)* rang, ios::beg

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    Ca me fait à peu près comme au départ il ne m'affiche pas les lignes mais des petits morceaux par ci par la et parfois ne m'affiche rien.

  6. #6
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    en fait, c'est tout à fait normal : tes accès sont en texte (ascii) et sizeof() te renvoie une taille en nombre d'octets.

    si tu veux stoker tes données en binaire, regarde donc dans la faq.

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

Discussions similaires

  1. [Fortran 77] Fichier à accès direct
    Par ERICKO dans le forum Fortran
    Réponses: 15
    Dernier message: 31/03/2009, 14h01
  2. Réponses: 5
    Dernier message: 02/10/2006, 22h54
  3. Réponses: 7
    Dernier message: 18/03/2006, 13h16
  4. Réponses: 37
    Dernier message: 30/11/2005, 19h41
  5. [TOMCAT] Comment empêcher l'accès direct aux fichiers
    Par thomine dans le forum Tomcat et TomEE
    Réponses: 17
    Dernier message: 14/04/2005, 10h19

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