supprimer le n eme espace d'une chaine - Perl - Programmation
Marsh Posté le 07-04-2006 à 11:01:52
Oui. 
 
EDIT : histoire d'éviter de faire mon lourd, il te suffit d'utiliser une expression régulière. 
 
Exemple : 
| my $chaine = "abc def efg hij klm nop qrs tuv xyz";  | 
 
 
Explication : le premier groupement, $1, ((\S*?\s){5}) rassemble cinq pâtés de caractères qui ne sont pas des espaces, suivis d'un espace. 
$2 on l'oublie, il contient le dernier de ces pâtés trouvé. 
$3 contient le pâté précédent le sixième espace à supprimer. 
\s c'est l'espace qu'on veut supprimer 
$4 c'est tout le reste qui suit, sans distinction.
Marsh Posté le 07-04-2006 à 11:17:31
Ok merci peux tu me dire laquelle? 
 
Re ok et re merci   
 
Marsh Posté le 07-04-2006 à 11:19:26
Les expressions régulières sont reinnes en perl apparemment 
Marsh Posté le 07-04-2006 à 11:30:11
Pour faire mon lourd à mon tour, je tiens a signaler que  
| Code : 
 | 
 
Ne marche pas si la chaine commence par un espace 
Marsh Posté le 07-04-2006 à 11:36:04
Bien sûr que si, \S* signifiant "0 ou n caractères qui ne sont pas des espaces" ![[:itm] [:itm]](https://forum-images.hardware.fr/images/perso/itm.gif)
Marsh Posté le 07-04-2006 à 11:41:27
| Elmoricq a écrit : Bien sûr que si, \S* signifiant "0 ou n caractères qui ne sont pas des espaces"  | 
 
  totally true... j'aurais mieux fait de fermer ma bouche
 totally true... j'aurais mieux fait de fermer ma bouche  
 
Marsh Posté le 07-04-2006 à 11:42:31
Y a pas d'souçaille 
Marsh Posté le 07-04-2006 à 11:47:15
Aprés avoir testé ceci: 
 
| Code : 
 | 
 
 
J'obtiens ceci: 
 
| Citation :   | 
Marsh Posté le 07-04-2006 à 11:50:42
Gaffe au souci de backslash sur le forum (prendre le snipet que j'ai placé dans ma première réponse) : 
 
| $ cat test.pl  | 
Marsh Posté le 07-04-2006 à 11:50:55
manque les \ devant les S et s, vérifie bien ce qu'avait ecrit Elmoricq 
 
edit: ![[:benou_grilled] [:benou_grilled]](https://forum-images.hardware.fr/images/perso/benou_grilled.gif)
Marsh Posté le 07-04-2006 à 12:00:33
Au fait n'étant pas un expert des expressions régulières là j'avoue ne pas arriver à tout traduire surtout /$1$3$4/ . A votre bon coeur si je peux abuser. 
 
Merci
Marsh Posté le 07-04-2006 à 12:03:12
C'est dans la première réponse que je t'ai faite. 
Ajout à l'explication : 
Dans l'exemple ci-dessus, 
$1 == "abc def efg hij klm " 
$2 == "klm " (donc on l'oublie, il ne nous intéresse pas) 
$3 == "nop" 
$4 == "qrs tuv xyz" 
 
Pour plus de détails en revanche, il vaut mieux consulter http://www.perldoc.com
Marsh Posté le 15-04-2006 à 00:51:03
Salut, 
 
| anapajari a écrit : Pour faire mon lourd à mon tour, je tiens a signaler que   | 
 
 
Donc Elmoricq a expliqué que ça marche. Cependant il y a des cas où ça ne marche pas. 
 
Par exemple l'existance de 2 ou plus des espaces ou des tabulations entre les mots. 
Ex: entre nop et qrs il y a 2 espaces 
"abc def efg hij klm nop  qrs tuv xyz" 
 
Mesure preventive 
| Code : 
 | 
 
script complet
| Code : 
 | 
 
lami20j 
Marsh Posté le 15-04-2006 à 09:50:27
Ou alors on peut utiliser \s+, ce qui permettra de gérer cette possibilité sans altérer la chaîne.
Marsh Posté le 15-04-2006 à 10:00:51
Salut, 
 
| Elmoricq a écrit : ce qui permettra de gérer cette possibilité sans altérer la chaîne. | 
 
 
Dans cet esprit alors il peut utiliser ça depuis le début. 
| Code : 
 | 
 
lami20j
Marsh Posté le 15-04-2006 à 10:06:15
C'est à ça que je pensais.  
 
 
Je n'avais pas prévu ce cas-là lorsque j'ai rédigé à ma regexp.
Marsh Posté le 15-04-2006 à 10:16:35
Re, 
 
Il manque toujours les \ avant S et s 
Pourquoi? Pourtant je les ai mis au début. C'est à cause des  balises code? Merci. 
 
lami20j 
Marsh Posté le 17-04-2006 à 22:18:13
Oui, c'est à cause de ces balises. Le temps que ce soit résolu, j'utilise [fixed][/fixed].
Marsh Posté le 07-04-2006 à 10:56:30
Bonjour,
Existe il une fonction en perl qui me permetrait de supprimer par exemple le 6 eme espace d'une chaine de caractère?
Merci