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 :

explication sur un code perl


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 319
    Points : 80
    Points
    80
    Par défaut explication sur un code perl
    salut,

    Je suis debutant en perl et je voulais essayer de parser un fichier xml donc j'ai recuperer un code en faisant une recherche sur le forum mais il y a certaine chose que je ne comprend pas.
    Voila le code
    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
    #!/usr/bin/perl
     
     
    use XML::Parser;
     
    # initialize the parser
    my $parser = XML::Parser->new( Handlers => 
    {
    Start=>\&handle_start,
    End=>\&handle_end,
    });
    $parser->parsefile( "./prot.xml" );
     
    my @stack;
     
    sub handle_start {
    	my($name, $desc);
    	my($protein, %attrs ) = @_;
    	push( @stack, { protein=>$protein});
    	if( %attrs ) {
    		while( my( $key, $value ) = each( %attrs )) {
    		if ($key eq "protein_name") {
    			$name = $value;
    			open FILE, ">>./Result.txt" or die "Peut pas ouvrir Result.txt !!";
    			print FILE "$name\t";
    			}
    		if ($key eq "protein_description") {
    			$desc = $value;
    			open FILE, ">>./Result.txt" or die "Peut pas ouvrir Result.txt !!";
    			print FILE "$desc\n";
    			}
    		}
    	}
    }
     
    sub handle_end {
       #Do nothing ! 
    }
    my($protein, %attrs ) = @_;
    cela signifie que ma fonction aura deux variables, un scalaire et une table de hachage;mais pourquoi on n'a pas rajouter
    my($name, $desc);
    ce sont pourtant des variable ??

    push( @stack, { protein=>$protein});
    cette partie du code sert uniquement à alimenter un tableau avec protein=>nom de la proteine , il appeler dans la fonction seulement, il n'est pas vitale pour le code ?

    if( %attrs ) {
    cela signifie si ma table de hachage existe ?vu qu'on la declarer en haut forcement elle existe.

    while( my( $key, $value ) = each( %attrs )) {
    je n'ai pas trop saisi cette partie ..??

    Mercii

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Melvine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( my( $key, $value ) = each( %attrs )) {
    je n'ai pas trop saisi cette partie ..??

    Mercii
    Dans ton hash, $key sera une clé et $value sa valeur.

    C'est la même chose qu'un foreach(keys %attrs).

    Exemple :

    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
     
    my %toto;
    $toto{1} = "un";
    $toto{2} = "deux";
     
    # avec while
    while( my ($key, $value) = each(%toto)) {
        print "clé $key renvoie $value\n";
    }
     
    # avec foreach
    foreach my $key(keys (%toto))
    {
        print "clé $key renvoie $toto{$key}\n";
    }

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 319
    Points : 80
    Points
    80
    Par défaut
    je ne comprend plus rien;
    j'ai lancer le script la premiere fois il fonctionnait et la quand je le lance il ne fonctionne plus et ne crée plus le fichier Result.txt

  4. #4
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 319
    Points : 80
    Points
    80
    Par défaut
    je viens d'essayer de le lancer à partir de windows et il ne fonctionne pas non plus
    j'y comprend plus rien

  5. #5
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonjour.

    Si tu es débutant, je te conseille de lire les très bon cours de formation à Perl de GLDavid disponibles ici (ce sont les cours de David Bourgais, le vrai nom de GLDavid).

    Sinon, pour tes questions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my($protein, %attrs ) = @_;
    signifie que le sous programme handle_start reçoit deux arguments : un scalaire et une table de hachage.

    teste non pas l'existence de la table de hachage mais si elle est contient quelque chose. C'est dû à l'applatissement des listes en Perl.

    Quant au push, il ne semble effectivement pas indispensable au bon fonctionnement du code.
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  6. #6
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 319
    Points : 80
    Points
    80
    Par défaut
    est ce que quelqu'un aurait un script pour faire le parsing svp ??

Discussions similaires

  1. demande d'explication sur un code
    Par Zilfi63 dans le forum VBA Access
    Réponses: 4
    Dernier message: 08/06/2009, 17h05
  2. Sollicite explication sur un code
    Par Yampougri dans le forum Langage
    Réponses: 2
    Dernier message: 02/12/2007, 00h12
  3. Explication sur du code javascript
    Par griese dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/07/2006, 09h40
  4. cherche explication sur du code
    Par abdoulzak dans le forum Langage
    Réponses: 1
    Dernier message: 06/07/2006, 10h23
  5. besoin d'explications sur un code
    Par NAHIAG dans le forum C
    Réponses: 8
    Dernier message: 28/05/2006, 12h37

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