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

Modules Perl Discussion :

[débutant] Opération sur un fichier XML


Sujet :

Modules Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 33
    Points
    33
    Par défaut [débutant] Opération sur un fichier XML
    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 :
    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;
    }
    Les parties en vert sont celle que j'ai rajoutée.
    Quand je teste, on me dis que une erruer de syntaxe au niveau de Qulequ'un pourrait m'aider, je suis perdu là

    Merci d'avance

  2. #2
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut
    Bonjour,
    J'ai la flemme de regarder ton code, mais ce qui est sur, c'est que @numstack est un tableau et pour choper un de ses elements on fait $numstack[un _entier], car dans ce cas on recupere une variable scalaire (donc $), le @ representant tout le tableau.

    Si ton tableau est plutot du style tab[chaine_de_caracteres], ca s'ecrit, en perl %tab pour le tableau (au lieu d'@) et on recupere l'element en faisant $tab{chaine_de_caracteres} (au lieu des [ ])

    Esperant t'avoir (un petit peu) aidé,
    Sohnic
    http://www.noctinfo.fr/

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez-le à conquérir le monde en le reproduisant.
    (")-(")

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Je vais faire plus simple. Je voudrais juste chercher les mots StackPort dans le fichier xml et récupérer pour chaque le chiffre qui suis.

    Vous connaissez une commande qui permet de chercher toutes les occurences ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Utilise une regex du style:

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Merci kuzco
    J'ai donc ca pour récupérer les valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub find_stack
    {  my( $twig, $find_stack)= @_; # handlers are always called with those 2 arguments
         $stack = $find_stack->trimmed_text();
         if ($stack =~ m/StackPort(\d+)/g) {
    	$num_stack = $stack;
    	print(" Num stack : $num_stack\n");
         }
         $twig->purge;
    }
    Maintenant comment je fais pour les mettre dans un tableau ou une liste ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    C'est bon j'ai trouvé merci encore pour ceux qui m'ont aidés

    Voila le code qui fonctionne bien :
    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
     
    sub print_eqts
    {
    	if ((defined($Equipment{'State'}))&&($Equipment{'State'} eq "Start")) {
    		@num_stack = sort @num_stack_temp;
    		foreach $num (@num_stack){
    			if($num ne '0') {
    				print ("Numero de stack : $num\n");
    			}
    		}
    	}
    	%Equipment = ('State' => 'Start');
    }
     
    sub find_stack
      {	my( $twig, $find_stack)= @_; # handlers are always called with those 2 arguments
        $stack = $find_stack->trimmed_text();
    	if ($stack =~ m/StackPort(\d+)/g) {
    		$num_stack_temp[$i] = $stack;
    	}
    	else {
    		$num_stack_temp[$i] = 0;
    	}
    	$i++;
        $twig->purge;
      }

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

Discussions similaires

  1. Débutant - Opérations sur des fichiers
    Par Pgs dans le forum Windows
    Réponses: 4
    Dernier message: 23/08/2010, 08h23
  2. [DOM] [Débutant(e)] écrire sur un fichier XML à partir de java
    Par Samanta dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 05/02/2008, 11h13
  3. Opération sur un fichier XML
    Par espadon1 dans le forum Modules
    Réponses: 1
    Dernier message: 10/06/2006, 10h25
  4. [crystal 10] declenchement etat sur arrivée fichier XML
    Par cchatelain dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/05/2005, 12h59
  5. Requete sur des fichiers XML
    Par buildit dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/05/2005, 10h57

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