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

Delphi Discussion :

Chargement à partir d'un fichier d'une structure bien définie (type Record)


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Par défaut Chargement à partir d'un fichier d'une structure bien définie (type Record)
    Bonjour,
    merci pour toute votre aide si précieuse.
    Voici mon problème.
    //---------
    Si je crée un 'record':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Type
      TyStructure = Record
        Entier16  : Word;                                                           // 2 octets
        Double64  : double;                                                        // 8 octets
      End;
    //-------------
    et que je sauve ces valeurs dans un fichier.
    //--------------
    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
     
    Const
      NomFichier = './Fichier01.bin';
     
    Type
      TyStructure = Record
        Entier16  : Word;                                                           // 2 octets
        Double64  : double;                                                         // 8 octets
      End;
     
    procedure TForm1.BtnSaveStructClick(Sender: TObject);
      var
        FSource                  : TFileStream;                                     // Fichier source
        Structure                : TyStructure;
      begin
        FSource:=TFileStream.Create(NomFichier, fmCreate);                          // ouvre le fichier d'entrée en Stream File
        try
          Structure.Entier16:=$1122;                                                // entier sur 16 bits
          Structure.Double64:=100;                                                  // réel sur 64 bits
          Fsource.Write(Structure, SizeOf(Structure))
        finally
          if assigned(FSource) then FreeAndNil(FSource);
        end;
      end;
    //-----------------
    je retrouve dans le fichier:
    - 2 octets ''22 11"
    puis 6 octets de bourrage indéfini,
    puis mon double de 8 octets.
    //------------------
    ce ne serait pas très grave si je devais recharger les données comme je les ai sauvées.
    //------------------
    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
     
    procedure TForm1.BtnRestoreStructClick(Sender: TObject);
      var
        FSource                  : TFileStream;                                     // Fichier source
        Structure                : TyStructure;
      begin
        Structure.Entier16:=0;
        Structure.Double64:=0;
        FSource:=TFileStream.Create(NomFichier, fmOpenReadWrite);                   // ouvre le fichier d'entrée en Stream File
        try
          Fsource.Read(Structure, SizeOf(Structure))
        finally
          if assigned(FSource) then FreeAndNil(FSource);
        end;
      end;
    //------------------
    Le problème, c'est que la structure à été sauvée par un autre logiciel et que le résultat dans le fichier
    sauvé est 2 octets (Word), suivit de 8 octets (double) sans octet de bourrage.
    //------------------
    y a t'il un moyen de restaurer une structure sans octet de bourrage à 8 octets.
    //------------------
    //------------------
    je précise que j'ai simplifié à l’extrême pour montrer le problème et que la structure réelle que je veux restaurer
    fait 1024 octets avec des chaines de caractères, des entiers signés ou non en 16 et 32 bits et des réels au format double.
    //----------------------
    Merci par avance et bonne journée

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    il suffit d'ajouter le mot clé "packed" devant "record" pour indiquer de respecter strictement la taille des types.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Type
      TyStructure = packed record
        Entier16  : Word;                                                           // 2 octets
        Double64  : double;                                                        // 8 octets
      End;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Par défaut Chargement à partir d'un fichier d'une structure bien définie (type Record)
    Bonjour,
    merci.
    bonne journée

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

Discussions similaires

  1. Déplacement de fichiers suivant une arborescence bien définie
    Par midou99 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 02/04/2013, 14h59
  2. sauvegarde et chargement à partir d'un fichier
    Par fomazou dans le forum Débuter
    Réponses: 7
    Dernier message: 14/05/2009, 22h23
  3. afficher à partir d'un fichier dans une table
    Par twister9458 dans le forum Général Java
    Réponses: 2
    Dernier message: 07/02/2009, 13h50
  4. probleme pour affilier un fichier a une structure
    Par coco.cohen dans le forum Débuter
    Réponses: 2
    Dernier message: 20/11/2007, 17h38
  5. Utilisation de fichiers avec une structure
    Par showdown dans le forum C
    Réponses: 16
    Dernier message: 07/12/2006, 18h30

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