[Perl] suppression fin chaîne de caractère

suppression fin chaîne de caractère [Perl] - Perl - Programmation

Marsh Posté le 14-04-2011 à 15:51:01    

Bonjour,
 
Je suis en train de m'arracher les cheveux sur quelque chose que j'imagine simple, mais vu mon niveau en perl !!!!
 
Voila j'ai une variable que contient une chaîne de caractère du style $var = aaaaa_bbbbbb .
Je veux supprimer tout ce qui est à partir du _  , c'est à dire ne garder que aaaaa .
Je précise que le nombre de a et de b peut varier.
 
Merci pour votre aide !
 
:hello:
 

Reply

Marsh Posté le 14-04-2011 à 15:51:01   

Reply

Marsh Posté le 14-04-2011 à 21:26:37    

Bonjour, il y a tout un tas de manière de faire ça.
une qui me vient à l'esprit: s/_.*//
 

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4.  
  5. my $var = "aaa_bbb";
  6. print $var, "\n";
  7. $var =~ s/_.*//o;
  8. print $var, "\n";

C:\Perl>perl test.pl
aaa_bbb
aaa


A+,


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

Marsh Posté le 15-04-2011 à 13:20:31    

Merci gilou, c'est nickel  
 
:jap: :jap: :jap:
 
Une autre question :
 
comment faire pour garder la deuxième partie d'une chaîne de caractère si je n'est pas le "_" mais un espace ?
 
C'est a dire comment faire si $var="aaaa bbbb" pour garder $var="bbbb" ?
 
Merci.

Reply

Marsh Posté le 15-04-2011 à 13:33:32    

Il va te falloir apprendre les expressions régulières et leur utilisation dans perl, parce que 1) c'est le point fort de perl, et 2) la c'est une utilisation particulièrement simple des expressions régulières

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4.  
  5. my $var = "aaa bbb";
  6. print $var, "\n";
  7. $var =~ s/.*\s(.*)/$1/o;
  8. print $var, "\n";


C:\Perl>perl test.pl
aaa bbb
bbb


 
A+,


Message édité par gilou le 15-04-2011 à 13:34:15

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

Marsh Posté le 15-04-2011 à 13:38:17    

Merci Gilou, c'est ce que je suis en train de faire mais grand débutant inside ;)
 
:jap:

Reply

Marsh Posté le 15-04-2011 à 14:49:03    

Je vais encore abuser mais faut que je comprenne !
 
si $var="aaa bbb ccc" et que je veux que $var="bbb" ?
 
:jap:

Reply

Marsh Posté le 15-04-2011 à 16:29:28    

il te faut juste comprendre comment fonctionne le "grouping" et ça tombe bien la doc est pas mal faite sur ce sujet :
http://perldoc.perl.org/perlretut. [...] ng-matches
 

Code :
  1. my $var = "aaa bbb";
  2. $var =~ s/(.*?) (.*?) (.*?)/$2/;


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 15-04-2011 à 16:34:04    

Un peu trop complexe la, et ça marchera pas si on a encore des blancs. Vaut donc mieux sélectionner la dernière partie sans blancs précédée par un blanc:

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4.  
  5. my $var = "aaa bbb ccc";
  6. print $var, "\n";
  7. $var =~ s/.*\s([^\s]*)/$1/o;
  8. print $var, "\n";


C:\Perl>perl test.pl
aaa bbb ccc
ccc

Edit: ah j'avais mal lu, je pensais que web_olivier voulait la partie finale.
Si tu veux juste la dernière partie entre deux blancs:

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4.  
  5. my $var = "aaa bbb ccc";
  6. print $var, "\n";
  7. $var =~ s/.*\s([^\s]+)\s.*/$1/o;
  8. print $var, "\n";


C:\Perl>perl test.pl
aaa bbb ccc
bbb

C'est la dernière partie entre deux blancs:
avec my $var = "aaa bbb ccc ddd";

C:\Perl>perl test.pl
aaa bbb ccc ddd
ccc


Pour le première partie entre deux blancs, c'est du même style, il suffit juste de dire au premier matching de ne pas être greedy (de ne pas tenter de matcher le maximum, mais juste de s’arrêter au premier match):

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4.  
  5. my $var = "aaa bbb ccc ddd";
  6. print $var, "\n";
  7. $var =~ s/.*?\s([^\s]+)\s.*/$1/o;
  8. print $var, "\n";


C:\Perl>perl test.pl
aaa bbb ccc ddd
bbb


A+,


Message édité par gilou le 15-04-2011 à 16:55:17

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

Sujets relatifs:

Leave a Replay

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