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 :

Reprise de donnée d'un fichier binaire type en C


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Points : 42
    Points
    42
    Par défaut Reprise de donnée d'un fichier binaire type en C
    Bonjour,

    j'ai un petit soucis. Je dois reprendre les données d'un fichier typé binaire écrit il y a 15 ans en C. J'ai bien la structure mais malheureusement je ne peux pas lire correctement les info :

    Voici la structure en C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        struct  resp  {
                        int g1_numger;    
                       char g1_nom[34];  
                       char g1_adresse[34];
                         }
    voilà ma structure et le code pour reprendre le text :

    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
    TResp=record
       g1_numger : integer;
       g1_nom : array[1..34] of char;
       g1_adresse : array[1..34] of char;
    end;
    ...
     
    Var
      FichierResp : file of  TResp ;
     
    ...
      AssignFile(FichierResp,'FICHIER.DAT');
      reset(FichierResp);
     
      i:=1;
      while not Eof(FichierResp) do begin
        Read (FichierResp, Resp) ;
        StringGridGERANT.Cells[0,i]:=IntToStr(Resp.g1_numger);
        StringGridGERANT.Cells[1,i]:=SuppCharZero(Resp.g1_nom);
        StringGridGERANT.Cells[2,i]:=SuppCharZero(Resp.g1_adresse);
        Inc(i);
      end;
      closefile(FichierResp);
      StringGridGERANT.RowCount:=i+1;
    Ca reprend bien des choses, mais le champ en integer part aux fraises.

    Est-ce que quelqu'un peut m'aider?

    Merci d'avance

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour, à mon avis il faudrait essayer de regarder le contenu binaire du fichier pour voir où cela cloche, peut-être que l'int du C et l'integer du Delphi ne sont pas codés sur le même nombre d'octets.

    Peux-être que le format d'écriture et de lecture est différent entre les deux aussi.

    Bref un bon exercice serait d'essayer de générer un même fichier façon Delphi et de comparer avec un éditeur héxa les différences.

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Salut,
    1) Vérifie que le type int original est bien sur 32 bits et non 16 bits.
    2) Tu as bien affaire à un entier signé ?
    3) Vérifie que les bits de poids fort et les bits de poids faible ne soient pas inversés :
    En gros, charge ton entier dans un tableau de 4 octets (b:array[0..3] of byte) et recompose ton entier comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i:=((b[0] shl 8 +b[1]) shl 8 +b[2]) shl 8 +b[3];
    ou comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i:=((b[3] shl 8 +b[2]) shl 8 +b[1]) shl 8 +b[0];

    enfin bon, tu vois le topo, hein ?

  4. #4
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Points : 42
    Points
    42
    Par défaut
    Merci des réponses... je vais tester!

    Je me dis que c'est peut-être plus simple de le faire le soft en c++ pour récupérer les données! Je vais chercher déjà sur Delphi!

  5. #5
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    essaye peut etre d'utiliser un packed record au lieu d'un record standard.

  6. #6
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Points : 42
    Points
    42
    Par défaut
    J'ai demandé à celui qui a fait le code en C!

    J'aurai les données.

    Merci beaucoup des tests!!!

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

Discussions similaires

  1. Stockage de données dans un fichier binaire
    Par DarkSeiryu dans le forum Windows Forms
    Réponses: 35
    Dernier message: 09/06/2009, 02h41
  2. Réponses: 4
    Dernier message: 04/04/2009, 20h10
  3. type de donnée pour un fichier binaire.
    Par cbleas dans le forum Modélisation
    Réponses: 9
    Dernier message: 14/01/2009, 21h26
  4. [VB.NET] insertion donnée dans un fichier binaire
    Par wolfazer dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/02/2008, 11h41
  5. Réponses: 10
    Dernier message: 19/06/2006, 19h04

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