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 Pascal Discussion :

Structure d'un packed array


Sujet :

Langage Pascal

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Points : 116
    Points
    116
    Par défaut Structure d'un packed array
    Bonjour,

    mon souci est le suivant :
    j'ai des fichiers .dat provenants d'un programme écrit en pascal. Mon but est d'arriver à récupérer les données contenues dans le fichier .dat avec un programme écrit dans un autre langage (Matlab).

    Je connais la structure des données, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
         tarc = record             (* enregistrement d'un arc  *)  
             numarc : [key(0)] integer ;    (* numero de l'arc *)
             pkdebarc,pkfinarc : real ;     (* pk de debut et de fin de l`arc *)
             pol    : integer  ;            (* polarisation de l'arc *)
             end  ;
    Donc là pas de souci je vais dire à mon programme d'ouvrir le fichier en lecture binaire, puis de lire successivement un entier sur 8 bits, 2 réels sur 32 bits, puis un entier sur 8 bits et recommencer ainsi de suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            numarc(i) = fread(fid, 1, 'uint32');
            pkdeb(i) = fread(fid,1,'float32');
            pkfin(i) = fread(fid,1,'float32');
            pol(i) = fread(fid,1,'uint32');
    Là où je bloque c'est pour arriver à lire ce qui est contenu dans un "packed array". Si j'ai bien compris le fonctionnement des packed arrays, 4 mots de 8 bits se trouvant dans 4 cases de 32 bits vont être regroupés dans une seule case de 32 bits.

    Comment puis-je faire pour connaître la façon dont les données ont été organisées ?
    Si je dis à ma fonction de lire par blocs de 32 bits je vais non pas me retrouver avec une seule valeur mais 4 :s

    Merci pour votre aide.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hie,

    Si ton Packed Array vient de Matlab, c'est la doc de ce logiciel qu'il faut consulter, ça ne dépend pas de Pascal.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    Peux-tu nous montrer la definition Pascal de ta packed array.

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    La directive packed n'est pas traitée de manière identique par tous les compilateurs Pascal : http://pascal.developpez.com/faq/?pa...rective-packed

    Par exemple, s'il s'agit de Turbo Pascal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tarc = packed record
             numarc : [key(0)] integer ;  // --> 2 bytes
             pkdebarc,pkfinarc : real ;   // --> 2 * 6 = 12 bytes
             pol    : integer  ;          // --> 2 bytes
           end;
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    FAi,
    Citation Envoyé par Alcatîz Voir le message
    Bonjour !

    La directive packed n'est pas traitée de manière identique par tous les compilateurs Pascal : http://pascal.developpez.com/faq/?pa...rective-packed

    Par exemple, s'il s'agit de Turbo Pascal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tarc = packed record
             numarc : [key(0)] integer ;  // --> 2 bytes
             pkdebarc,pkfinarc : real ;   // --> 2 * 6 = 12 bytes
             pol    : integer  ;          // --> 2 bytes
           end;
    Je doute que la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             numarc : [key(0)] integer ;  // --> 2 bytes
    compile avec TP.

    On a affaire là à un programme qui permet d'utiliser des fonctions écrites avec à peu près la syntaxe du Pascal, mais pour savoir ce qu'il en est précisément, il faut regarder sa doc ou son aide (comme ce devrait toujours être le cas ).
    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Points : 116
    Points
    116
    Par défaut
    Merci à tous pour vos réponses,

    Citation Envoyé par droggo Voir le message
    Hie,

    Si ton Packed Array vient de Matlab, c'est la doc de ce logiciel qu'il faut consulter, ça ne dépend pas de Pascal.
    Malheuresement il vient bien de Pascal et je n'ai pas la doc associée :/
    On m'a juste filé les sources du programme écrit en Pascal avant le portage et je n'ai accès à rien d'autre (ni compilateur, ni doc,...).

    Citation Envoyé par bredelet Voir le message
    Peux-tu nous montrer la definition Pascal de ta packed array.
    En recherchant sur le net j'ai trouvé cette déf qui me semble la plus adaptée :

    " Quand Pascal a été créé, la plupart des ordinateurs utilisaient des mots très grands (typiquement 60 bits). Les tableaux Pascal étaient inefficaces car une seule variable était stockée dans un mot. C'est pour cela que les packed array, dans lesquels plusieurs variables peuvent être stockées dans un seul mot, ont été créés. "

    Citation Envoyé par droggo Voir le message

    On a affaire là à un programme qui permet d'utiliser des fonctions écrites avec à peu près la syntaxe du Pascal, mais pour savoir ce qu'il en est précisément, il faut regarder sa doc ou son aide (comme ce devrait toujours être le cas ).
    Existe-t-il un site officiel sur le net qui fournisse de la doc complète ?
    J'ai recherché sur google en trouvant simplement quelques tutoriels.



    C'est sur qu'avec la doc, je comprendrais mieux comment les données sont regroupées et compactées, pour ensuite les extraire.
    Mais je croyais que c'était fait de la même façon pour tous les programmes Pascal.

  7. #7
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    Citation Envoyé par NeMo_O Voir le message
    En recherchant sur le net j'ai trouvé cette déf qui me semble la plus adaptée :

    " Quand Pascal a été créé, la plupart des ordinateurs utilisaient des mots très grands (typiquement 60 bits). Les tableaux Pascal étaient inefficaces car une seule variable était stockée dans un mot. C'est pour cela que les packed array, dans lesquels plusieurs variables peuvent être stockées dans un seul mot, ont été créés. "
    Merci bien, mais ce n'est pas ce que j'attendais!

    J'attendais quelque chose comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tarc = packed record
             numarc : [key(0)] integer ;  // --> 2 bytes
             pkdebarc,pkfinarc : real ;   // --> 2 * 6 = 12 bytes
             pol    : integer  ;          // --> 2 bytes
           end;

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par bredelet Voir le message
    Merci bien, mais ce n'est pas ce que j'attendais!
    Ah au temps pour moi lol.

    Dans le code je rencontre les packed array non pas sur toute la structure mais juste sur certaines variables ; par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         tarc = record             (* enregistrement d'un arc  *)  
             numarc : [key(0)] integer ;    (* numero de l'arc *)
             nomarc : packed array [1..40] of char  ;   (* nom de l'arc *)
             pkdebarc,pkfinarc : real ;     (* pk de debut et de fin de l`arc *)
             larc   : real ;                (* longueur de l'arc *)
             pol    : integer  ;            (* polarisation de l'arc *)
             end  ;

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jie,

    Citation Envoyé par NeMo_O Voir le message
    Ah au temps pour moi lol.

    Dans le code je rencontre les packed array non pas sur toute la structure mais juste sur certaines variables ; par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         tarc = record             (* enregistrement d'un arc  *)  
             numarc : [key(0)] integer ;    (* numero de l'arc *)
             nomarc : packed array [1..40] of char  ;   (* nom de l'arc *)
             pkdebarc,pkfinarc : real ;     (* pk de debut et de fin de l`arc *)
             larc   : real ;                (* longueur de l'arc *)
             pol    : integer  ;            (* polarisation de l'arc *)
             end  ;
    Au risque de me répéter, je ne pense pas que la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             numarc : [key(0)] integer ;    (* numero de l'arc *)
    compile.
    Je ne connais pas de compilateur Pascal acceptant cette syntaxe (ce qui, bien entendu, ne signifie qu'il n'en existe pas, mais aussi que de toute manière, s'il en existe un, il n'est pas courant).

    Quant à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             nomarc : packed array [1..40] of char  ;   (* nom de l'arc *)
    Cela fait probablement 40 octets
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. Conception d'un structure JSON(problème d'arrays)
    Par Furil dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2013, 08h09
  2. Structure de donnée: JudySL Array
    Par nono83260 dans le forum C
    Réponses: 4
    Dernier message: 12/07/2010, 18h34
  3. Réponses: 7
    Dernier message: 12/03/2007, 09h06
  4. Différence entre ARRAY et PACKED ARRAY
    Par homeostasie dans le forum Langage
    Réponses: 5
    Dernier message: 16/01/2007, 22h02
  5. organisation mémoire d'un packed array ?
    Par bjl dans le forum Langage
    Réponses: 3
    Dernier message: 18/03/2006, 09h24

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