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

  FORUM HardWare.fr
  Programmation
  Perl

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2070030
web_olivie​r
R1 Powaaaaa
Posté le 14-04-2011 à 15:51:01  profilanswer
 

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:
 

mood
Publicité
Posté le 14-04-2011 à 15:51:01  profilanswer
 

n°2070106
gilou
Modérateur
Modzilla
Posté le 14-04-2011 à 21:26:37  profilanswer
 

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é!  --
n°2070274
web_olivie​r
R1 Powaaaaa
Posté le 15-04-2011 à 13:20:31  profilanswer
 

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.

n°2070281
gilou
Modérateur
Modzilla
Posté le 15-04-2011 à 13:33:32  profilanswer
 

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é!  --
n°2070283
web_olivie​r
R1 Powaaaaa
Posté le 15-04-2011 à 13:38:17  profilanswer
 

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

n°2070309
web_olivie​r
R1 Powaaaaa
Posté le 15-04-2011 à 14:49:03  profilanswer
 

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

n°2070332
anapajari
s/travail/glanding on hfr/gs;
Posté le 15-04-2011 à 16:29:28  profilanswer
 

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.
n°2070333
gilou
Modérateur
Modzilla
Posté le 15-04-2011 à 16:34:04  profilanswer
 

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é!  --

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

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

 

Sujets relatifs
Suppression fichier FilesonicScheme - Traitement chaîne caractères
[resolu] Batch Caractere Joker dans une arborescenceParser un fichier en perl
[Perl / JS] [contourné] récupérer le contenu d'une variable JS[perl] regroupement de donnees suivies
enlever ou remplacer le caractere \[perl] Probleme double lecture
[perl] suppression d'un caractere dans une chaine 
Plus de sujets relatifs à : [Perl] suppression fin chaîne de caractère


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