Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1769 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] Parse d'un fichier de configuration

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PERL] Parse d'un fichier de configuration

n°1379461
masterlolo
Posté le 02-06-2006 à 08:50:34  profilanswer
 

Bonjour,
 
Je souhaite extraite d'un fichier de configuration quelques lignes, jusqu'à la rien d'extraordinaire, sauf peut être pour un novice !
Voici une partie de mon fichier de configuration :


# Config File
#
# Create and configure extension PC
#
extension PC set lang=FR
extension PC set timeoffset=7200
...
#
# Create and configure user PC_10
#
user PC_10 set addr=10.10.10.10
user PC_10 set dhcp=disable
...
user PC_10 set ping-timeout=300
#
# Create and configure user PC_11
#
...


Je souhaite récupérer uniquement les éléments user PC_10, user PC_11....
Vu que je ne connais pas le nombre de PC avant l'exécution du script, je commence par selectionner les lignes de commentaires :

Code :
  1. my $FILE = "/home/masterlolo/config.pc";
  2. my ($LIGNE, @PC, $PC, @DATA, $DATA);
  3. if (-e $FILE)
  4.     {
  5.     open (FILE, "$FILE" );
  6.     foreach $LIGNE (<FILE> )
  7.         {
  8.         chomp $LIGNE;
  9.         if ($LIGNE =~ /# Create and configure user/)
  10.             {
  11.             @DATA = split (/# Create and configure user /, $LIGNE);
  12.             push(@PC,@DATA);
  13.             }
  14.         }
  15.     }
  16. print ("@PC" );


Le résultat est alors :

 PC_10  PC_11  PC_12


Ce qui me gène dans ce résultat, c'est qu'entre chaque nom des PC, il y a un double espace !
Je n'arrive pas à savoir d'où il provient !
 
Ensuite, je pense que je n'aurai plus qu'a relire @PC, et extraire les données comme addr, dhcp, ... , ping-timeout.
Mais j'aimerai un avis avant de continuer, est-ce que je ne suis pas entrein de créer une usine à gaz ? :??:
 

mood
Publicité
Posté le 02-06-2006 à 08:50:34  profilanswer
 

n°1379493
franceso
Posté le 02-06-2006 à 09:35:25  profilanswer
 

est-ce que c'est pas un peu dangereux de te baser uniquement sur les commentaires ? (étant donné que les commentaires ne sont pas obligatoires, tu pourrais te retrouver avec un bloc de définition de PC_xx non commenté ou commenté sous une autre forme que celle que tu attends)
 
sinon, comment tu veux procéder après ? tu veux utiliser des hashmaps pour stocker les valeurs lues ?
 
 
Pour ton problème de détection des PC_xx, je procèderais ainsi :

Code :
  1. if( $LIGNE =~ /^\# Create and configure user (PC_\d+)/ )
  2. {
  3.   push( @PC, $1 );
  4. }


 
normalement, tu devrais éviter les espaces indésirés...

Message cité 1 fois
Message édité par franceso le 02-06-2006 à 09:36:35

---------------
TriScale innov
n°1379568
pospos
Posté le 02-06-2006 à 10:32:23  profilanswer
 

Il y a pas mal de modeuls de parsing de fichier de configuration sur cpan (search.cpan.org), chacun specialisé dans tel ou tel format.
Il existe aussi un parser "automatique" qui pourrait bien marcher directement pour toi: Config::Auto
http://search.cpan.org/~cosimo/Config-Auto/

n°1380758
masterlolo
Posté le 04-06-2006 à 13:35:29  profilanswer
 

franceso a écrit :

est-ce que c'est pas un peu dangereux de te baser uniquement sur les commentaires ?


Ce n'est pas faux !
 
J'ai revu ma méthode pour extraire mes données :
 
1/ Je met le fichier dans un tableau
2/ Sur le tableau, j'utilise les lignes commençant par user et j'extrait les informations.
3/ J'affiche pour vérifier le résultat
 
cela fonctionne à priori sur mon fichier, je n'ai pas encore eu d'erreur lors de l'execution.
mais je suis prenneur de tous les commentaires :)
 

Code :
  1. my $FILE = "/home/masterlolo/config.pc";
  2. my ($LIGNE, @LIGNE, $DATA, @FILE, $CHAMP);
  3. if ( -e $FILE)
  4. {
  5.  open (FILE, "$FILE" );
  6.  @FILE = <FILE>;
  7.  close (FILE);
  8.  @FILE = grep(/^user\\s/, @FILE);
  9.  foreach $DATA (@FILE)
  10.  {
  11.   @LIGNE = split(/^user\\s/,$DATA);
  12.   foreach $LIGNE (@LIGNE)
  13.   {
  14.                                                    # Traitement des lignes en UNSET
  15.    if ($LIGNE =~ /\\sunset\\s/)
  16.    {
  17.     my ($USER,$TRASH,$CHAMP) = split(/\\s+/,$LIGNE);
  18.     $CHAMP =~ s/-/_/g;
  19.     print "[DEBUG] $CHAMP=unset pour $USER; \n";
  20.    }
  21.                                                    # Traitement des lignes en SET
  22.    if ($LIGNE =~ /\\sset\\s/)
  23.    {
  24.     my ($USER,$TRASH,$SET) = split(/\\s+/,$LIGNE);
  25.     ($CHAMP, $SET) = split(/=+/,$SET);
  26.     $CHAMP =~ s/-/_/g;
  27.     print "[DEBUG] $CHAMP='$SET' pour $USER; \n";
  28.    }
  29.   }
  30.  }
  31. }
  32. else
  33. {
  34.  print ("$FILE introuvable !" );
  35. }


Message édité par masterlolo le 04-06-2006 à 13:39:41

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] Parse d'un fichier de configuration

 

Sujets relatifs
[VBA Excel] Chemin fichier ouvrirconcatenation 3 fichier dans un autre en dos
recuellir le nom des machines allumées dans un fichier[EXCEL][VBS] fermeture de fichier
extraction d'une partie d'un fichier sous condition (sed)ouverture d'un fichier excel avec vba
Creer tables à partir d'un fichier texte[tomcat] telechargement de fichier lent
[perl] supprimer les emails bounces (retour/erreur) d'une base mysqlLinux - Redirection de la sortie vers un fichier
Plus de sujets relatifs à : [PERL] Parse d'un fichier de configuration


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR