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"
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
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:
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