[Perl] Optimisation

Optimisation [Perl] - Perl - Programmation

Marsh Posté le 25-04-2003 à 12:58:08    

Slt all,
 
Voila, je souhaite avoir votre avis sur la situation suivante
 

Code :
  1. @tab=`cat 1.txt`;
  2. for $ligne(@tab){
  3.     ($a,$b,$c,$d)= split (/:/, $ligne);


 
Concernant une substitution sur la valeur de $a et $d, le plus optimal serait de faire une substitution sur $ligne ou sur $a et $d suivant le split ?
 
ps: la substitution est identique pour $a et $d. :)
 
A mon avis, le mieux est de le faire sur chaque variable, ainsi la commande evitera de balayer la ligne entière.


Message édité par vfqs le 25-04-2003 à 12:59:29
Reply

Marsh Posté le 25-04-2003 à 12:58:08   

Reply

Marsh Posté le 25-04-2003 à 13:30:44    

vfqs a écrit :

Slt all,
 
Voila, je souhaite avoir votre avis sur la situation suivante
 

Code :
  1. @tab=`cat 1.txt`;
  2. for $ligne(@tab){
  3.     ($a,$b,$c,$d)= split (/:/, $ligne);


 
Concernant une substitution sur la valeur de $a et $d, le plus optimal serait de faire une substitution sur $ligne ou sur $a et $d suivant le split ?
 
ps: la substitution est identique pour $a et $d. :)
 
A mon avis, le mieux est de le faire sur chaque variable, ainsi la commande evitera de balayer la ligne entière.

si tu ne veux juste que récupérer $a et $d + permuter $d dans $a et vice versa, tu peux faire ça :
 

Code :
  1. @tab=`cat 1.txt`;
  2. for $ligne(@tab){
  3.     if ($ligne =~ /^(.+):.+:.+:(.+).$/) {   
  4.         $a = $2;
  5.         $d = $1;
  6.     }
  7. }


Message édité par Aricoh le 25-04-2003 à 13:32:25
Reply

Marsh Posté le 25-04-2003 à 13:38:47    

Euh...c pas trop ca que je veux. :)
 
En fait, je voulais savoir quelle serait le plus optimal entre ces des deux bouts de code:
 

Code :
  1. @tab=`cat 1.txt`;
  2. for $ligne(@tab){
  3.    ($a,$b,$c,$d)= split (/:/, $ligne);
  4.    $a=~ s/toto/titi/;
  5.    $d=~ s/toto/titi/;
  6.    }

 
 

Code :
  1. @tab=`cat 1.txt`;
  2. for $ligne(@tab){
  3.     $ligne=~ s/toto/titi/g;
  4.    ($a,$b,$c,$d)= split (/:/, $ligne);
  5.    }

 

Reply

Marsh Posté le 25-04-2003 à 13:43:49    

dans le 1er code, tu as 2 substitutions
dans le second, juste 1
 
tu vois où je veux en venir ?  ;)

Reply

Marsh Posté le 25-04-2003 à 13:50:24    

Aricoh a écrit :

dans le 1er code, tu as 2 substitutions
dans le second, juste 1
 
tu vois où je veux en venir ?  ;)  

C ce que je me dis aussi. Mais en termes de temps de traitement ? Chuss pas sur que le le 1er cas soit le plus rapide, car il balaye la ligne entière.

Reply

Marsh Posté le 25-04-2003 à 14:06:05    

dans les deux cas c'est extremement rapide, à moins que ta ligne fasse 30mo!
 
Dans tous les cas c'est difficile de savoir à l'avance: il faut voir la gueule de ta ligne.
 
L'efficacité d'une regexp est jamais certaines: parfois il vaut mieux faire /tralala|tralali/ et parfois /tralala/ | /tralali/ par exemple, et ca depend des cas. Ya aussi l'instruction study qui permet parfois de gagner un peu de temps...
Dans tous les cas pour du traitement comme ca tu va perdre plus de temps à te prendre la tete à optimiser que celui que tu gagnera au final.
 
Si vraiment tu veux avoir une reponse utilise le module benchmark pour faire le test avec tes données et ton matos (disque dur rapide et processeur lent, ou l'inverse, ne donneront pas forcement les meme resultats par exemple)

Reply

Sujets relatifs:

Leave a Replay

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