Comprendre des lignes d'un script

Fermé
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016 - Modifié par baladur13 le 8/02/2016 à 10:57
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 11 févr. 2016 à 19:36
Bonjour,

Tout le monde je suis en train d'essayer de travailler sur un script en perl développé par un ancien collègue. Et je rencontre un certain problème à comprendre la signification de certaines lignes et la différences entre le "if" et le "else".

J'espère que vous pourrez m'aidez Merci d'avance.

 my $xmlfile = XMLin($xml_file ) or logAndDie "[ERROR] Can not read XML file $xml_file !\n";
        #print Dumper($xmlfile);

      <bold>  if ( ref($xmlfile->{LIST_G_BURSTING}->{G_BURSTING}) ne 'ARRAY' )</bold>
        {
         
                my $Addr = $xmlfile->{LIST_G_BURSTING}->{G_BURSTING};
                if ( $number_version == 2 )
                {
                        &all_burst($Addr);
                }
                else
                {
                        &treat_pdf($Addr);
                }
        }
        else
        {
                
               <bold> foreach my $Addr ( @{ $xmlfile->{LIST_G_BURSTING}->{G_BURSTING} } )</bold>
                {
                        if ( $number_version == 2 )
                        {
                                &all_burst($Addr);
                        }
                        else {
                                &treat_pdf($Addr);
                        }
                }
        }


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 10/02/2016 à 11:06
Salut lefreeman63,

Il semble que cet extrait de code utilise un module
Perl XML::Simple
(bien que le
use XML::Simple;
ne soit pas présent dans ce que tu as posté) pour parser un fichier XML.

Le module transforme le fichier XML en un hash dont les clefs sont les balises XML.

Dans l'arborescence de ce fichier XML, visiblement, il peut y avoir à l'emplacement {LIST_G_BURSTING}->{G_BURSTING} soit :

- une seule valeur (une seule $Addr)
- ou une liste de plusieurs valeurs (plusieurs $Addr)

Le premier if vérifie si à cet emplacement se trouve une référence à un tableau. Si ce n'est pas le cas, il en déduit qu'une seule valeur est stockée, et cette valeur est mise dans $Addr pour être traitée.

Le else traite donc le cas où cet emplacement stocke une référence à un tableau. Le foreach parcours ce tableau, en extrayant les différentes valeurs successivement dans une variable $Addr et en les traitant successivement.

Regarde la structure du fichier XML traité pour comprendre ce qui est fait.

Voilà aussi de la documentation pouvant t'aider :

https://metacpan.org/pod/release/GRANTM/XML-Simple-2.22/lib/XML/Simple.pm
https://perldoc.perl.org/functions/ref
https://perldoc.perl.org/perlreftut (simplifié)
https://perldoc.perl.org/perlref (complet)


Dal
1
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016
11 févr. 2016 à 16:33
Un grand merci pour ton explication sa m'a beaucoup aidé.

Tu peux peut-être encore m'aidé, :-D

Comment fais pour faire en sorte que mon fichier fasse référence à un tableau??? :-)

Je vais essayer de m'expliquer:
Sur un de mes fichier XML je possède 1 balise LIST_G_BURSTING et 2 balises G_BURSTING, donc normalement je fais référence à un tableau mais ce n'est pas le cas il passe dans mon IF et non dans mon else...

J'ai plein d'autre fichier avec la même structure mais généré par XMLpublisher qui fonctionne parfaitement avec une référence à un tableau et qui passe par mon else

Mais dans ce cas la précis avec un fichier généré par PLSQL sa ne fonctionne pas.


AUrais-tu une idée stp?

Merci d'avance.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
11 févr. 2016 à 19:36
Sans la source XML de données, c'est difficile de t'aider d'avantage.

Pourrais-tu poster un exemple court de fichier XML sur lequel se pose le problème ?

Dal
0
trareon Messages postés 50 Date d'inscription jeudi 21 janvier 2016 Statut Membre Dernière intervention 12 février 2016 11
8 févr. 2016 à 11:35
Bonjour,
Je ne sait pas si cela va répondre à ta question mais le IF défini une première condition (traduit par un SI), dans le cas ou la condition est respecter le script ne va prendre que les ligne dans le IF, si elle n'ait pas respecter il passe à la suite. Le ELSE est la deuxième condition qui peut être traduit par SINON, elle s’exécute quand la condition IF n'est pas respecter.
En espérant avoir pu t'aider.
CDT
0
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016
8 févr. 2016 à 11:54
C'est gentil pour ton aide.
Il semble que le gras que j'avais mis sur les lignes est disparus en plus :-(

J'ai un souci en particulier avec les conditions du IF et tous ce qui concerne le XML :-/

ref($xmlfile->{LIST_G_BURSTING}->{G_BURSTING}) ne 'ARRAY'
my $Addr = $xmlfile->{LIST_G_BURSTING}->{G_BURSTING};
foreach my $Addr ( @{ $xmlfile->{LIST_G_BURSTING}->{G_BURSTING} }
0