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" ?
Je ne répond à aucune question technique par MP.
Si votre problème est réglé, n'oubliez pas Dans tous les cas
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; }
Si un ricard vaut un steak, j'ai bien bouffé une vache hier soir !
L'art de poser les bonnes questions dans les forums afin de ne pas passer pour un
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...
Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.
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
Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.
Sinon, une autre variante :
En Perl TIMTOWTDI
Code : Sélectionner tout - Visualiser dans une fenêtre à part chop $string if $string =~m/\s$/
"En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
Application :
ainsi qu'à regarder la avant de poser une question.
La rubrique Perl recrute, contactez-moi.
tiens pour le delire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 { local $/=' '; chomp $string; }
Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.
Héhéhé, j'ai pensé au même, mais le mien tient sur une ligneEnvoyé par pospos
"En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
Application :
ainsi qu'à regarder la avant de poser une question.
La rubrique Perl recrute, contactez-moi.
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) }
Si un ricard vaut un steak, j'ai bien bouffé une vache hier soir !
L'art de poser les bonnes questions dans les forums afin de ne pas passer pour un
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
Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.
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"$/"/;
Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.
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