Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    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 : 2
    Points
    2

    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 :
    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 expérimenté

    Profil pro Marc
    Ingénieur développement logiciels
    Inscrit en
    novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Nom : Marc
    Localisation : Suisse

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

    Informations forums :
    Inscription : novembre 2009
    Messages : 377
    Points : 509
    Points
    509

    Par défaut

    Je n'ai jamais utilisé cette fonction, mais d'après la doc :

    istream& seekg ( streamoff off, ios_base::seekdir dir );

    off
    Integral value of type streamoff representing the offset to be applied relative to an absolute position specified in the dir parameter.
    dir
    Seeking direction. It is an object of type ios_base::seekdir that specifies an absolute position from where the offset parameter off is applied. It can take any of the following member constant values:
    Donc le premier paramètre est un offset sur le second, ce qui fait dans ton cas.

    Fin + 87

    Je pense que tu cherches plutôt fin - 87.

  3. #3
    Invité de passage
    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 : 2
    Points
    2

    Par défaut

    Citation Envoyé par manticore Voir le message
    Je n'ai jamais utilisé cette fonction, mais d'après la doc :



    Donc le premier paramètre est un offset sur le second, ce qui fait dans ton cas.

    Fin + 87

    Je pense que tu cherches plutôt fin - 87.

    Bonjour,

    Merci de votre réponse mais mon problème est déjà réglé ! J'avais oublié de passer en résolu.

    Cdt

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •