Salut tout le monde,
En stage, on m'a demandé de modifier un script perl. Celui-ci ouvre un fichier XML, recherche plusieurs infos dedans et les place ensuite dans un fichier csv. Le problème que j'ai c'est qu'avant, chaque info était seulement présente une fois.
Maintenant j'ai une autre info à trouver mais qui peut être présente plusieurs fois. Je vous avoue que je n'y connais pratiquement rien au perl.
Voici une partie du code :
Les parties en vert sont celle que j'ai rajoutée.
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 #!/bin/perl use strict; use warnings; use diagnostics; my %Equipment = (); my $compteur = 1; use XML::Twig; my $twig= new XML::Twig( #force_end_tag_handlers_usage => 1, TwigHandlers => { # create the twig 'SchemaInfo/CreatedAt' =>\&updatetime, 'Cisco_NetworkElement/Description' => \&description, 'Cisco_NetworkElement/PhysicalPosition' => \&site, 'Cisco_NetworkElement/SysObjectId' => \&sysobjectid, 'Cisco_NetworkElement/OfficialHostName' => \&name, 'Cisco_LogicalModule/Cisco_OSElement' => \&oselement, 'Cisco_PhysicalMemory' => \&memory, 'Cisco_CommunicationConnector/Description' => \&find_stack }, start_tag_handlers => { 'RMEPlatform' => \&newEquipment} ); my $file="inventory.xml"; open(RES,'>inventory.csv') or die 'Erreur d\'ecrire, Verifier vos droits en lecture sur le repertoire courant'; print RES "Network;\"Device Name\";\"Update Time\";\"SysObjectID\";\"Location\";\"Numero stack\"\n"; $twig->parsefile($file); # build it $twig->purge; &print_eqts; close RES; sub print_eqts { if ((defined($Equipment{'State'}))&&($Equipment{'State'} eq "Start")) { my $type = $Equipment{'ChassisType'}; my $reseau = ""; my $stack = $Equipment{'StackPort'}; my $nb_stack = 0; foreach($stack =~ /^StackPort\d/) { my @num_stack[$nb_stack] = $1; $nb_stack++; } foreach $stack (@num_stack){ print RES "$reseau;$hostname;$time;$sysid;$stack\n"; } } %Equipment = ('State' => 'Start'); } sub newEquipment { $compteur++; &print_eqts; }
Quand je teste, on me dis que une erruer de syntaxe au niveau deQulequ'un pourrait m'aider, je suis perdu là
Code : Sélectionner tout - Visualiser dans une fenêtre à part @num_stack[$nb_stack]
Merci d'avance
Partager