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 :

Manipuler une structure de HASH


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Manipuler une structure de HASH
    j'ai besoin d'un coup de main je viens de commencé avec le langage Perl!!!!!
    je dispose de la structure suivante:
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    VAR= {
                                   'E22G1' => {
                                              'type' => 'GN',
                                              'W' => {
                                                     'lemma' => 'cuisse',
                                                     'tokens' => 'E22T1',
                                                     'form' => 'cuisse',
                                                     'id' => 'E22F1',
                                                     'mstag' => 'wh.minus person.3 time.minus hum.minus gender.fem number.sg',
                                                     'pos' => 'nc',
                                                     'ht' => "refl.minus"
                                                   }
                                            },
                                   'E22G2' => {
                                              'type' => 'GP',
                                              'W' => {
                                                     'E22F3' => {
                                                                'form' => 'poulet',
                                                                'lemma' => 'poulet',
                                                                'tokens' => 'E22T3',
                                                                'pos' => 'nc',
                                                                'mstag' => 'wh.minus t'
                                                              },
                                                     'E22F2' => {
                                                                'mstag' => '',
                                                                'pos' => 'prep',
                                                                'tokens' => 'E22T2',
                                                                'lemma' => 'de',
                                                                'form' => 'de'
                                                              }
                                                   }
                                            },
                                   'E22G4' => {
                                              'W' => {
                                                     'ht' => "refl.minus ",
                                                     'form' => 'haut',
                                                     'lemma' => 'haut',
                                                     'tokens' => 'E22T6',
                                                     'pos' => 'nc',
                                                     'mstag' => 'wh.minus person.3 time.minus hum.minus gender.masc number.sg',
                                                     'id' => 'E22F6'
                                                   },
                                              'type' => 'GN'
                                            },
                                   'E22G3' => {
                                              'W' => {
                                                     'ht' => "refl.minus ",
                                                     'tokens' => 'E22T4',
                                                     'lemma' => "r\x{f4}tir",
                                                     'form' => "r\x{f4}ti",
                                                     'mstag' => 'gender.masc number.sg',
                                                     'id' => 'E22F4',
                                                     'pos' => 'adj'
                                                   },
                                              'type' => 'GA'
                                            },
                                   'E22G5' => {
                                              'W' => {
                                                     'E22F8' => {
                                                                'tokens' => 'E22T8',
                                                                'lemma' => 'suisse',
                                                                'form' => 'suisse',
                                                                'mstag' => 'wh.minus person.3 time.minus hum.minus gender.masc.fem number.sg',
                                                                'pos' => 'nc',
                                                                'ht' => 'refl.minus'
                                                              },
                                                     'E22F7' => {
                                                                'pos' => 'prep',
                                                                'mstag' => '',
                                                                'form' => 'de',
                                                                'tokens' => 'E22T7',
                                                                'lemma' => 'de'
                                                              }
                                                   },
                                              'type' => 'GP'
                                            }
                                 },

    et j'aimerai accéder obtenir:
    si le 'type' est équivalant à 'GP' renvoyer 'lemma' dans 'W' sous forme 'lemma1,lemma2'
    sinon renvoyer directement 'lemme' ce trouvant sous 'W'


  2. #2
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Tu n'en dis pas assez sur ce dont tu as besoin, mais voici déjà une piste (en supposant que j'ai compris tes besoins):
    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
     
    my %hash = (
      'E22G1' => {
        'type' => 'GN',
        'W' => {
    # ... suite du hash omise pour faire court dans le post
    # ...
        'type' => 'GP'
      }
    );
     
    for my $key (keys %hash) {
    	if ($hash{$key}{type} eq 'GP') {
    		my $lemme;
    		for my $value (values %{$hash{$key}{W}}) {
    			$lemme .= "$value->{lemma},";
    		}
    		print "$lemme \n";
     
    	} else {
    		print "$hash{$key}{W}{lemma} \n";
    	}
    }
    Ce qui imprime:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ perl hohoh.pl
    cuisse
    rotir
    de,suisse,
    haut
    poulet,de,
    Si tu as besoin de plus amples informations, dis-nous lesquelles.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut merci pour la réponse
    j'ai un fichier xml à la base que je parse en perl le voila :

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Document id="frmg" dtdVersion="2.0" xmlnslink="http://www.w3.org/1999/xlink">
    <Sentence id="E1" mode="full" best="yes" trust="100">
    <T id="E1T1">
    cuisse
    </T>
    <G id="E1G1" type="GN">
    <W id="E1F1" pos="nc" lemma="cuisse" form="cuisse" tokens="E1T1" ht="refl.minus imp.minus extraction.minus diathesis.minus ctrsubj.minus arg2.kind.minus arg2.pcas.minus arg2.real.minus arg2.extracted.minus arg2.subarg.minus arg2.function.minus arg1.kind.minus arg1.pcas.minus arg1.real.minus arg1.extracted.minus arg1.subarg.minus arg1.function.objà arg0.kind.minus arg0.pcas.de.minus arg0.real.minus arg0.extracted.minus arg0.function.objde" mstag="wh.minus person.3 time.minus hum.minus gender.fem number.sg"/>
    </G>
    <T id="E1T2">
    de
    </T>
    <T id="E1T3">
    poulet
    </T>
    <G id="E1G2" type="GP">
    <W id="E1F2" pos="prep" lemma="de" form="de" tokens="E1T2" mstag=""/>
    <W id="E1F3" pos="nc" lemma="poulet" form="poulet" tokens="E1T3" ht="refl.minus imp.minus extraction.minus diathesis.minus ctrsubj.minus arg2.kind.minus arg2.pcas.minus arg2.real.minus arg2.extracted.minus arg2.subarg.minus arg2.function.minus arg1.kind.minus arg1.pcas.minus arg1.real.minus arg1.extracted.minus arg1.subarg.minus arg1.function.objà arg0.kind.minus arg0.pcas.de.minus arg0.real.minus arg0.extracted.minus arg0.function.objde" mstag="wh.minus person.3 time.minus hum.minus gender.masc number.sg"/>
    </G>
    <T id="E1T4">
    sans
    </T>
    <T id="E1T5">
    peau
    </T>
    <G id="E1G3" type="GP">
    <W id="E1F4" pos="prep" lemma="sans" form="sans" tokens="E1T4" mstag=""/>
    <W id="E1F5" pos="nc" lemma="peau" form="peau" tokens="E1T5" ht="refl.minus imp.minus extraction.minus diathesis.minus ctrsubj.minus arg2.kind.minus arg2.pcas.minus arg2.real.minus arg2.extracted.minus arg2.subarg.minus arg2.function.minus arg1.kind.minus arg1.pcas.minus arg1.real.minus arg1.extracted.minus arg1.subarg.minus arg1.function.minus arg0.kind.obj arg0.pcas.minus arg0.real.N2 arg0.extracted.minus arg0.function.obj" mstag="wh.minus person.3 time.minus hum.minus gender.fem number.sg"/>
    </G>
    <R type="MOD-N" id="E1R2">
    <modifieur ref="E1F5"/>
    <nom ref="E1F3"/>
    </R>
    <R type="MOD-N" id="E1R1">
    <modifieur ref="E1F3"/>
    <nom ref="E1F1"/>
    </R>
    </Sentence>
    </Document>

    et je souhaite enfaîte obtenir:

    quand ''G'' est un 'type =GP' alors renvoyer le "lemma" exemple : dans le fichier j'ai un 'G' -> sans peau.
    sinon renvoyer le lemme directement
    pour obtenir au final un sortie de ce type:
    cuisse
    de poulet
    sans peau


    merciiiiiii encore pour l'aide

  4. #4
    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
    Pour avoir les mots dans l'ordre il faut sans doute trier les clés :
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Taisha:~/perl/forum $ perl -E 'my $h = {
                                   "E22G1" => {
                                              "type" => "GN",
                                              "W" => {
                                                     "lemma" => "cuisse",
                                                     "tokens" => "E22T1",
                                                     "form" => "cuisse",
                                                     "id" => "E22F1",
                                                     "mstag" => "wh.minus person.3 time.minus hum.minus gender.fem number.sg",
                                                     "pos" => "nc",
                                                     "ht" => "refl.minus"
                                                   }
                                            },
                                   "E22G2" => {
                                              "type" => "GP",
                                              "W" => {
                                                     "E22F3" => {
                                                                "form" => "poulet",
                                                                "lemma" => "poulet",
                                                                "tokens" => "E22T3",
                                                                "pos" => "nc",
                                                                "mstag" => "wh.minus t"
                                                              },
                                                     "E22F2" => {
                                                                "mstag" => "",
                                                                "pos" => "prep",
                                                                "tokens" => "E22T2",
                                                                "lemma" => "de",
                                                                "form" => "de"
                                                              }
                                                   }
                                            },
                                   "E22G4" => {
                                              "W" => {
                                                     "ht" => "refl.minus ",
                                                     "form" => "haut",
                                                     "lemma" => "haut",
                                                     "tokens" => "E22T6",
                                                     "pos" => "nc",
                                                     "mstag" => "wh.minus person.3 time.minus hum.minus gender.masc number.sg",
                                                     "id" => "E22F6"
                                                   },
                                              "type" => "GN"
                                            },
                                   "E22G3" => {
                                              "W" => {
                                                     "ht" => "refl.minus ",
                                                     "tokens" => "E22T4",
                                                     "lemma" => "r\x{f4}tir",
                                                     "form" => "r\x{f4}ti",
                                                     "mstag" => "gender.masc number.sg",
                                                     "id" => "E22F4",
                                                     "pos" => "adj"
                                                   },
                                              "type" => "GA"
                                            },
                                   "E22G5" => {
                                              "W" => {
                                                     "E22F8" => {
                                                                "tokens" => "E22T8",
                                                                "lemma" => "suisse",
                                                                "form" => "suisse",
                                                                "mstag" => "wh.minus person.3 time.minus hum.minus gender.masc.fem number.sg",
                                                                "pos" => "nc",
                                                                "ht" => "refl.minus"
                                                              },
                                                     "E22F7" => {
                                                                "pos" => "prep",
                                                                "mstag" => "",
                                                                "form" => "de",
                                                                "tokens" => "E22T7",
                                                                "lemma" => "de"
                                                              }
                                                   },
                                              "type" => "GP"
                                            }
                                 };
    for my $k (sort keys %$h) {
      say +"-"x50;
      say +(($h->{$k}{type} eq 'GP')
            ? join(" ", map {$h->{$k}{W}{$_}{lemma}} sort keys %{$h->{$k}{W}})
            : $h->{$k}{W}{lemma}
    	);
    }'
    --------------------------------------------------
    cuisse
    --------------------------------------------------
    de poulet
    --------------------------------------------------
    rôtir
    --------------------------------------------------
    haut
    --------------------------------------------------
    de suisse
    Taisha:~/perl/forum $
    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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    merciiiiii pour ta réponse

Discussions similaires

  1. manipuler une grosse structure
    Par mr_samurai dans le forum MATLAB
    Réponses: 8
    Dernier message: 27/02/2008, 21h21
  2. manipulation d'un tableau d'une structure de donnee
    Par questionvb dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/03/2007, 14h02
  3. Réponses: 3
    Dernier message: 10/01/2007, 18h44
  4. [toFAQ][socket] Envoi d'une structure
    Par julien20vt dans le forum C++
    Réponses: 15
    Dernier message: 23/04/2003, 15h47
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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