Bonjour,
Il me faudrait quitter le dernier caractere d'une chaine de caractere si celui-ci est un espace, je dois le faire avec une expression reguliere mais je ne sais pas comment le coder.
Pouvez me dire comment faire???
Bonjour,
Il me faudrait quitter le dernier caractere d'une chaine de caractere si celui-ci est un espace, je dois le faire avec une expression reguliere mais je ne sais pas comment le coder.
Pouvez me dire comment faire???
Ca veut dire quoi "quitter un caractère" ?
Si tu parles d'éliminer les espaces au bout d'un string, voici comment faire:
Pas testé, mais ça devrait fonctionner. Au pire, ça va détruire l'univers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 my $string = "Bonjour espaces "; $string =~ s/\s*$//;
j'ai testé ton code vince et à priori ma baraque est encore là
devrait ne te détruire que le dernier espace ! si c'est ce que tu cherches !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $string =~ s/\s$//;
sinon dérivé de ça tu peux te faire des fonctions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 # suppression des espaces en début ET fin de chaine sub trim($) { my $string = shift; $string =~ s/^\s+//; $string =~ s/\s+$//; return $string; } # suppression des espaces à gauche de la chaine sub ltrim($) { my $string = shift; $string =~ s/^\s+//; return $string; } # suppression des espaces à droite de la chaine sub rtrim($) { my $string = shift; $string =~ s/\s+$//; return $string; }
rcageot, un peu de refactoring sur ton code si tu permets:
;-)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 # suppression des espaces en début ET fin de chaine sub trim($) { my $string = shift; return ltrim(rtrim($string)); } # suppression des espaces à gauche de la chaine sub ltrim($) { my $string = shift; $string =~ s/^\s*//; return $string; } # suppression des espaces à droite de la chaine sub rtrim($) { my $string = shift; $string =~ s/\s*$//; return $string; }
mais pourquoi diable transformer quelquechose qui prend une ligne en un appel de fonction qui donne au finale un truc encore plus long rien que pour l'appeler ?!
de plus si je puis moi aussi me permettre qq remarques, la suppression leading et trailing peut sans probleme se faire en une seule regexp : s/^\s+|\s+$//g;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $string = triml($string); # 25 chars (plus la definition de la fonction) $string =~ s/^\s+//; # 20 chars
et de meme il vaut mieux utiliser \s+ que \s*
hmm desolé si je suis desagreable, j'ai eu une journée chiante...
pospos: parce que trim() retourne une chaîne de caractère, donc on peut dire:
etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if (trim($chaine) ne "") { print "Pas vide\n"; } @tableau = map { trim($_) } @tableau;
oui mais bon la plupart des utilisation reviennent à du in place à la fin, puisqu'au fon il n'y a souvent aucune raison de conserver la version "avec espaces".
par exemple ton map est encore plus court en in place (et bcp plus efficace):
Code : Sélectionner tout - Visualiser dans une fenêtre à part map {s/^\s+//} @tableau
Sinon, une autre variante :
En Perl TIMTOWTDI
Code : Sélectionner tout - Visualiser dans une fenêtre à part chop $string if $string =~m/\s$/
tiens pour le delire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 { local $/=' '; chomp $string; }
Héhéhé, j'ai pensé au même, mais le mien tient sur une ligneEnvoyé par pospos
Woufeil:
pour enlever tous les espaces à la fin, remplace ton 'if' par 'while'.
Bonjour,
Merci pour ces éléments, je suis en train de faire des tests, mais quand j'essaye d'utiliser TRIM(), j'ai un message d'erreur qui me dit:
Pouvez me dire s'il faut utiliser une librairie en particulier et laquelle??Undefined subroutine &main::trim
Merci
et bien pour utiliser trim qui n'existe pas en perl il te faut le déclarer en tant que sub dans ton code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 mon code .. etc. etc. $mavar1 = trim($mavar2); etc. etc. exit; sub trim { return (unevaleur) }
Je n'arrive pas à faire ce que je veux exactement, j'utilise des HASH et c'est un peu plus compliqué que je croyais.
En fait, j'explique rapidement:
je lis un fichier temporaire qui est le résultat de la lecture d'un fichier binaire avec une struture XML.
Je récupère chaque champ et les combines avec CSV_XS qui permet de me créer un fichier au format CSV.
L'espace à la fin d'une chaine de caractère est interprété comme un 0 avec CSV_XS. Comme je n'arrive pas à le quitter, je voudrais chercher la chaine de caractère suivante:
et la remplacer par"0"
Cela est-il possible avec des expressions régulières? ou d'une autre manière???"
Merci
tu peux reprendre tous les exemples donnés si dessous en remplacant "\s" (ou parfois " ") par "0" et ca marchera nikel
ok, parfait, mais encore un petit pb.
il me faut trouver la chaine
mais pas celle-ci"0"
Est-il possible de mettre 2 conditions dans une expression régulière?;"0"
ha donc tu a des guillemets autour de ta valeur?
ca change un peu les choses
et tu veux remplacer "0" par un guillemet seul?
si c'est le cas sa doit donner un truc de ce genre:
et si tu veux eviter le ; juste avant il faut utiliser les zero length assertions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $string =~ s/"0"$/"/;
Code : Sélectionner tout - Visualiser dans une fenêtre à part $string =~ s/(?<!;)"0"$/"/;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager