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

Langage Delphi Discussion :

[TFileStream] Récupération de données structurées


Sujet :

Langage Delphi

  1. #1
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut [TFileStream] Récupération de données structurées
    Bonjour,

    J'ai créer un type qui est la structure exacte de ce qu'il y a dans mon fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    type THeaderFile = record
      Header    : string[2];
      Type1      : String[1];
      Type2      : string[1];
      Pays        : string[1];
      Tel          : string[1];
      Val          : string[6];
      Val2        : string[1];
      Blank      : string[3];
    end;
    Donc avec un TFileStream, je tente de récupérer les donné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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      fFile : TFileStream;
      hHeader : THeaderFile;
    begin
      if OpenDialog1.Execute then
      begin
        fFile := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
        With fFile do
        try
          seek(0, soFromBeginning); // Debut du fichier
          Position := 106; // position 106 du fichier
          ReadBuffer(hHeader,Sizeof(hHeader));
     
      Memo1.Lines.Add('Header : ' + IntToStr(Ord(hHeader.Header[1])) + IntToStr(Ord(hHeader.Header[2])));
      Memo1.Lines.Add('Type 1 :' + IntToStr(Ord(hHeader.Type1[1])));
      Memo1.Lines.Add('type 2 :' +IntToStr(Ord(hHeader.Type2[1])));
      Memo1.Lines.Add('Pays :' + IntToStr(Ord(hHeader.Pays[1])));
      Memo1.Lines.Add('Tel :' + IntToStr(Ord(hHeader.Tel[1])));
      Memo1.Lines.Add('Val :' + hHeader.Val);
      Memo1.Lines.Add('Val2 :' + hHeader.Val2);
      Memo1.Lines.Add('Blank :' + hHeader.Blank);
        finally
          fFile.Free;
        end;
      end;
    end;
    Le problème c'est que les 3 premiers octects sont bon (hHeader.Header, et hHeader.Type1) mais après ca devient n'importe quoi.

    Si quelqu'un voit d'où vient le problème.

    Pour info la structure du fichier :
    [106c]
    [Header 2c][Type1 1c][Type2 1c][Pays 1c][Tel 1c][Val 6c][Val2 1c][Blank 3c][Nombre de caractère = Type1 + Type2 + Pays + Tel + Val2]
    [Header 2c][Type1 1c][Type2 1c][Pays 1c][Tel 1c][Val 6c][Val2 1c][Blank 3c][Nombre de caractère = Type1 + Type2 + Pays + Tel + Val2]
    [Header 2c][Type1 1c][Type2 1c][Pays 1c][Tel 1c][Val 6c][Val2 1c][Blank 3c][Nombre de caractère = Type1 + Type2 + Pays + Tel + Val2]
    etc ...
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  2. #2
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Position := 106; // position 106 du fichier
    La ya une erreur ... a mon avis tu voulais parler de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Position := 106*Sizeof(hHeader); // position 106 du fichier
    a +ou- 1 pres.

    Ilm faut penser que les stream fonctionent en au niveau octale.
    Donct si tu veux le 106e enregistrement, il te faut te deplacer de 106 * Tailel d'un enregistrement Octets.

    Sinon pourquoi ne passe tu pas par "Seek(106*SizeOf(..), soFromBegining)" ?
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Le position à 106 (octet) est voulu car le debut du fichier n'est pas structuré comme le reste.

    Bon en fait j'ai trouvé la solution en trifouillant un peu


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    type THeaderFile = record
      Header    : Array [1..2] of char;
      Type1      : char;
      Type2      : char;
      Pays        : char;
      Tel          : char;
      Val          : Array [1..6] of char;
      Val2        : char;
      Blank      : Array [1..3] of char;
    end;
    Avec ca ca fonctionne nickel.

    Le problème, maintenant, c'est de gérer un tableau dynamique de char pour récupérer le reste.


    Je vais faire une petite recherche sur le forum pour ca ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

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

Discussions similaires

  1. [MySQL] Structure DB et récupération de données
    Par menthe dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 04/03/2011, 21h29
  2. Récupération de données structurées dans un fichier
    Par magicland dans le forum Débuter
    Réponses: 6
    Dernier message: 08/06/2008, 15h55
  3. [ DB2] => [ORACLE] Récupération de données
    Par LeDid dans le forum DB2
    Réponses: 3
    Dernier message: 25/06/2003, 17h10
  4. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  5. [XMLRAD] récupération de donnée
    Par Mitch79 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 30/01/2003, 15h36

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