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

  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] Subtition

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PERL] Subtition

n°2165088
grulles
Posté le 22-11-2012 à 12:14:38  profilanswer
 

Bonjour amis développeurs
 
Encore un chalenge !
Voila j'ai un fichier texte qui contient des séries de "x"  
j'utilise une fonction qui me permet de lire le fichier et qui doit remplacer cette série de "x" par des "_" (underscore)  
Donc je lis le fichier, je test quelle ligne contient plus de 2 "x" de suite, maintenant j'essaye de remplacer ce pattern par un nombre égale de "_".
C'est ici que je bloque. je n'arrive pas à remplacer "x" par autant de "_".  
Voici la fonction qui lit et qui test chaque ligne qui contient plus de 2 "x".  
sub read_file ($) {
   # This sub is used to read the file a store in an array  
 my $src_name=$_[0];
 open(INFILE,"<",$src_name) or  
    die("Unable to open input file $src_name" );
 while ( <INFILE> ) {
   
  if (m/x{2,}/) {
   # --->>> C'est ici mon problème.
   print $_ ;
  }
 }
}
 
Merci pour vos réponses.
Cordialement  
Damien  

mood
Publicité
Posté le 22-11-2012 à 12:14:38  profilanswer
 

n°2165200
gilou
Modérateur
Modzilla
Posté le 22-11-2012 à 21:29:30  profilanswer
 

Bonjour,
 
Insérer a la place de la ligne
# --->>> C'est ici mon problème.  
ceci
s/x(?=xx)/-/g;
s/xx/--/g;
et ça devrait rouler.
 
Note: dans le code, on peut aussi remplacer if (m/x{2,}/) par if (m/xx/)
 
J'ai fait un test bête:
axxxxbcxxxdxxex ->  a----bc---d--ex
 
A+,


Message édité par gilou le 23-11-2012 à 00:34:15

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2165238
grulles
Posté le 23-11-2012 à 10:04:25  profilanswer
 

Bonjour Gilou
Merci pour ta réponse. Excellente comme toujours.  
Tu mérites que je te paye un coup un de ces quatre.
Je n'arrive pas à trouver l'explication de (?=xx). A quoi correspond ce "?" ?  
A bientôt.  

n°2165255
gilou
Modérateur
Modzilla
Posté le 23-11-2012 à 12:15:20  profilanswer
 

:hello:  
 
/x(?=xx)/ en fait, ça cherche un x suivi de deux x a droite, mais ça n'inclus pas le xx à droite dans la zone considérée comme traitée par le pattern matching.
 
Avec s/x(xx)/-/;    axxxxb ->  a-xb
Avec s/x(?=xx)/-/; axxxxb ->  a-xxxb
 
Ensuite le /g applique la transformation récursivement (en recommençant donc juste après le x transformé en - à chaque fois) ce qui a pour effet de collapser un xx....xxxx en --....--xx
s/x(?=xx)/-/g;        axxxxb ->  a--xxb
 
et le s/xx/--/g final traite les xx finaux restant.
 
A+,


Message édité par gilou le 23-11-2012 à 12:15:36

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

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

  [PERL] Subtition

 

Sujets relatifs
Sockets en Perl[PERL] Récupérer des données dans un fichier txt
[PERL] Nouvel utilisateur ou toujours le même ...[PERL] Mixer un tableau
PERL SQLPLUS encapsulé[PERL] Lire un paragraphe
CGI perlWin32 invalide en executant 1 script perl via Eclipse
[PERL] problème avec variable de session PHPHelp comparaison de deux fichier perl
Plus de sujets relatifs à : [PERL] Subtition


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