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

sauver un hash de array dans un fichier


Sujet :

Langage Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut sauver un hash de array dans un fichier
    Bonjour à tous,

    Y at-il moyen de sauver facilement un hash de array dans un fichier, en vue de le réimporter tel quel plus tard dans un autre programme ? Connaissez-vous des modules ?

    D'avance merci.
    -- Jasmine --

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    J'ai maintenant transformé mon tableau en hash de hash de array. Mais, je suppose que la question reste la même. Merci.
    -- Jasmine --

  3. #3
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Le plus simple et portable est sans doute Data::Dumper. En moins portable mais dans le core il y a Storable. Après il y a aussi YAML et JSON...
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci cmcmc, je vais y regarder et je reviens donner mon avis.
    -- Jasmine --

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Juste en complément, Data::Dumper fait aussi partie des modules core.

  6. #6
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Un petit exemple vite fait avec Data::Dumper :
    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
    29
    30
    31
    Taisha:~/perl/forum $ perl -E '
    my $h = { b => { c => { foo => 1, bar => 2 }}, a => [0 .. 3], d => [4, 6, 8, 10]};
    {
       use Data::Dumper;
       local ($Data::Dumper::Purity, $Data::Dumper::Terse) = (1,1);
       print Dumper($h);
    }' > h.dat
    Taisha:~/perl/forum $ cat h.dat
    {
              'a' => [
                       0,
                       1,
                       2,
                       3
                     ],
              'b' => {
                       'c' => {
                                'bar' => 2,
                                'foo' => 1
                              }
                     },
              'd' => [
                       4,
                       6,
                       8,
                       10
                     ]
            }
    Taisha:~/perl/forum $ perl -MData::Dump -e 'my $h = do "h.dat"; dd $h'
    { a => [0 .. 3], b => { c => { bar => 2, foo => 1 } }, d => [4, 6, 8, 10] }
    Taisha:~/perl/forum $
    note que l'utilisation de Data::Dump ci-dessus n'a rien à voir avec la sérialisation/désérialisation de $h: je l'utilise juste pour la fonction dd qui est pratique et compacte pour les impressions de debug. La sérialisation est faite par et la désérialisation par
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Il existe bien le module Storable, mais j'avoue également utiliser les facilités de Data::Dumper, qui en outre, permet d'avoir accès, offline, au contenu de la structure à l'aide d'un simple éditeur de texte. La manipulation d'exportation est très simple, celle d'importation un peu moins (si l'on intègre la gestion des exceptions avec les tests de $@, $! et le retour de la fonction do), mais bien documentée dans l'aide de la fonction do (avec notamment un exemple de programme).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  8. #8
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour à vous deux,

    Merci pour vos réponses :

    Voila, j'ai adapté ... ça fonctionne vraiment bien, un grand merci.
    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use Data::Dumper;
    local ($Data::Dumper::Purity, $Data::Dumper::Terse) = (1,1);
     
     
    my $h = { b => { c => { foo => 1, bar => 2 }}, a => [0 .. 3], d => [4, 6, 8, 10]};
     
    my $file = 'test.txt';
    open(my $fh, ">", $file)  or die "cannot create file : $!";	
    print $fh Dumper($h);
    close $fh;
     
     
    open(my $fh2, "<", $file)  or die "cannot open file : $!";	
    my $h2 = do "test.txt";
    close $fh2;
     
    print Dumper($h2);

    Comment choisir de mettre 1 ou de laisser le défaut ?
    $Data::Dumper::Purity or $OBJ->Purity([NEWVAL]) : Controls the degree to which the output can be evaled to recreate the supplied reference structures. Setting it to 1 will output additional perl statements that will correctly recreate nested references. The default is 0.

    $Data::Dumper::Terse or $OBJ->Terse([NEWVAL]) : When set, Data::Dumper will emit single, non-self-referential values as atoms/terms rather than statements. This means that the $VARn names will be avoided where possible, but be advised that such output may not always be parseable by eval.

    Bonne fin de journée,
    -- Jasmine --

  9. #9
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Comment choisir de mettre 1 ou de laisser le défaut ?
    Je l'utilise personnellement comme ci dessus sans état d'âme sachant que je ne m'en sers que pour des structures potentiellement complexes mais pas auto-référentes... Donc purity est probablement overkill mais terse permet de ne pas utiliser de variables globales.
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  10. #10
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci, j'ai encore quelques questions.
    Quelle est l'utilité d'une variable autoréférente ?
    A partir de quelle complexité de structure vaut-il mieux mettre purity à 1 ?
    Est-ce que la taille du tableau compte aussi dans cette complexité ?

    Bonne journée.
    -- Jasmine --

  11. #11
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Merci, j'ai encore quelques questions.
    Quelle est l'utilité d'une variable autoréférente ?
    Je voulais parler d'une structure dont certains membres pointent sur d'autres de la structure, par exemple un arbre ou un graphe :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Taisha:~/perl/forum $ perl -E '
    my $a = { name => "alice" };
    my $b = { name => "bob", parent => $a };
    push @{$a->{children}}, $b;
    my $c = { name => "charles", parent => $b};
    push @{$b->{children}}, $c;
    my $d = { name => "dave", parent => $b};
    push @{$b->{children}}, $d;
    push @{$c->{siblings}}, $d;
    push @{$d->{siblings}}, $c;
    use Data::Dumper; print Dumper($a);
    say+"-"x50;
    use Data::Dump; dd $a'
    $VAR1 = {
              'name' => 'alice',
              'children' => [
                              {
                                'parent' => $VAR1,
                                'children' => [
                                                {
                                                  'name' => 'charles',
                                                  'parent' => $VAR1->{'children'}[0],
                                                  'siblings' => [
                                                                  {
                                                                    'parent' => $VAR1->{'children'}[0],
                                                                    'siblings' => [
                                                                                    $VAR1->{'children'}[0]{'children'}[0]
                                                                                  ],
                                                                    'name' => 'dave'
                                                                  }
                                                                ]
                                                },
                                                $VAR1->{'children'}[0]{'children'}[0]{'siblings'}[0]
                                              ],
                                'name' => 'bob'
                              }
                            ]
            };
    --------------------------------------------------
    do {
      my $a = {
        children => [
          {
            children => [
              {
                name => "charles",
                parent => 'fix',
                siblings => [{ name => "dave", parent => 'fix', siblings => ['fix'] }],
              },
              'fix',
            ],
            name => "bob",
            parent => 'fix',
          },
        ],
        name => "alice",
      };
      $a->{children}[0]{children}[0]{parent} = $a->{children}[0];
      $a->{children}[0]{children}[0]{siblings}[0]{parent} = $a->{children}[0];
      $a->{children}[0]{children}[0]{siblings}[0]{siblings}[0] = $a->{children}[0]{children}[0];
      $a->{children}[0]{children}[1] = $a->{children}[0]{children}[0]{siblings}[0];
      $a->{children}[0]{parent} = $a;
      $a;
    }
    Taisha:~/perl/forum $
    On voit que Data::Dumper et Data::Dump utilisent des méthodes différentes pour reconstituer la structure. $Data::Dumper::Terse = 1 ne fonctionnerait probablement pas dans ce cas.
    A partir de quelle complexité de structure vaut-il mieux mettre purity à 1 ?
    Aucune idée car je ne m'en sers pas pour des structures autoréférentes.
    Est-ce que la taille du tableau compte aussi dans cette complexité ?
    Pour des structures complexes mais pas autoréférentes je n'ai pas rencontré de limitation de taille.
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  12. #12
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci beaucoup pour toutes ces explications, je peux clore le sujet.
    -- Jasmine --

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

Discussions similaires

  1. [PHP 5.4] Mettre le contenu d'un array dans un fichier
    Par aspkiddy dans le forum Langage
    Réponses: 9
    Dernier message: 06/03/2014, 23h56
  2. Ecriture/ Lecture d'une array dans un fichier
    Par Seth77 dans le forum C#
    Réponses: 4
    Dernier message: 19/03/2012, 22h39
  3. ecriture d'un array dans un fichier txt
    Par julien25 dans le forum MATLAB
    Réponses: 4
    Dernier message: 07/04/2009, 23h19
  4. sauver et lire un png dans un fichier xml
    Par Papy214 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/09/2008, 12h24
  5. Réponses: 3
    Dernier message: 21/11/2007, 17h52

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