Comment parser de facon propres ces parametres

Comment parser de facon propres ces parametres - Perl - Programmation

Marsh Posté le 07-03-2006 à 23:07:11    

j'ai des parametres du style param = value
 
param est toujours 1 seul mot, alors que value peut contenir plusieurs mots
 
je peux aussi avoir plusieurs association param/value sur une meme ligne, du genre
 


param1 = value1_part1 param2 = value2_part1 value2_part2 param3 = value3_part1 value3_part2 value3_part3


 
je cherche une facon vraiment efficace de me construire un hash, si quelqu'un y voit plus clair que moi.
 
J'ai déjà réussi à parser mais c'est pas très propre, je posterai demain lorsque je vais avoir le code sous la main
 
merci

Reply

Marsh Posté le 07-03-2006 à 23:07:11   

Reply

Marsh Posté le 08-03-2006 à 09:51:33    

bin t'es un peu obliger de parser quoi qu'il arrive :/
moi j'aurais fait un truc dans le genre:

Code :
  1. use strict;
  2. my $param;
  3. my $value;
  4. my %res;
  5. my $a = "param1 = value1_part1 param2 = value2_part1 value2_part2 param3 = value3_part1 value3_part2 value3_part3";
  6. while($a =~ /=/){
  7.   ($param) = ( $a =~ /(.*?) \=/);
  8.   $a =~ s/(.*?) \=//;
  9.   ($value) = ( $a =~ /(.*?) [^ ]* \=/);
  10.   $a =~ s/(.*?) ([^ ]* \=)/$2/;
  11.   $res{$param} = $value;
  12. }
  13. $res{$param} = $a; ### last value is not matched by regex


maintenant il doit bien y avoir 1000 façons de faire la même chose ... comme d'hab en perl en fait!  
T'as vérifié s'il n'y avait pas un module qui faisait ça?

Reply

Marsh Posté le 08-03-2006 à 21:54:24    

et les differentes parties de value tu veux les concaener dans ta valeur de hash? ou les mettre sous forme de reference de liste?

Reply

Marsh Posté le 08-03-2006 à 23:54:53    

pospos a écrit :

et les differentes parties de value tu veux les concaener dans ta valeur de hash? ou les mettre sous forme de reference de liste?


 
concaténer

Reply

Marsh Posté le 09-03-2006 à 00:39:14    

ce genre de truc ca se regle bien à coup de reverse:
 

Code :
  1. my $a = "param1 = value1_part1 param2 = value2_part1 value2_part2 param3 = value3_part1 value3_part2 value3_part3";
  2. my %hash = map scalar reverse, reverse reverse($a) =~ /(.+?) = (\S+)\s*/g;

Message cité 1 fois
Message édité par pospos le 09-03-2006 à 00:55:49
Reply

Marsh Posté le 10-03-2006 à 14:24:02    

pospos a écrit :

ce genre de truc ca se regle bien à coup de reverse:
 

Code :
  1. my $a = "param1 = value1_part1 param2 = value2_part1 value2_part2 param3 = value3_part1 value3_part2 value3_part3";
  2. my %hash = map scalar reverse, reverse reverse($a) =~ /(.+?) = (\S+)\s*/g;



 
ca fonctionne énormément bien
me reste plus qu'à le comprendre :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed