Question
Controler les espaces de fin de chaine de caracteres
- J-L Prout
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 28
- Remerciements reçus 0
il y a 3 mois 2 semaines #34979
par J-L Prout
Controler les espaces de fin de chaine de caracteres a été créé par J-L Prout
Bonjour à tous,
J'ai une chaîne de caractères, très ordinaire que j'appelle $Expresion, par exemple:
" Portez ce whisky au vieux juge blond qui fume " (*)
Je voudrais supprimer les espaces éventuels de début et les espaces éventuels de fin pour récupérer seulement:
"Portez ce whisky au vieux juge blond qui fume"
Bien sûr, je ne connais ni le nombre d'espaces de début ni le nombre d'espaces de fin.
Avec l'opérateur "-match", j'arrive bien à isoler les espaces de début, mais pour les espaces de fin, j'ai essayé
toutes sortes de combinaisons sans jamais arriver à isoler en totalité les espaces de fin dans un $Matches[n], n ayant
valeur de fin des $Matches.
Pour ma part j'ai beaucoup tourné autour de:
"$Expression -match '^( *)(..*)( *)$'"
mais il n'y a rein à faire;
Quelqu'un a-t-il une solution qui conviendrait?
(*) Curiosité: cette phrase, que j'utilise souvent comme modèle de chaîne de caractères, a la propriété de contenir
au moins une fois chaque lettre de l'alphabet latin.
J'ai une chaîne de caractères, très ordinaire que j'appelle $Expresion, par exemple:
" Portez ce whisky au vieux juge blond qui fume " (*)
Je voudrais supprimer les espaces éventuels de début et les espaces éventuels de fin pour récupérer seulement:
"Portez ce whisky au vieux juge blond qui fume"
Bien sûr, je ne connais ni le nombre d'espaces de début ni le nombre d'espaces de fin.
Avec l'opérateur "-match", j'arrive bien à isoler les espaces de début, mais pour les espaces de fin, j'ai essayé
toutes sortes de combinaisons sans jamais arriver à isoler en totalité les espaces de fin dans un $Matches[n], n ayant
valeur de fin des $Matches.
Pour ma part j'ai beaucoup tourné autour de:
"$Expression -match '^( *)(..*)( *)$'"
mais il n'y a rein à faire;
Quelqu'un a-t-il une solution qui conviendrait?
(*) Curiosité: cette phrase, que j'utilise souvent comme modèle de chaîne de caractères, a la propriété de contenir
au moins une fois chaque lettre de l'alphabet latin.
Connexion ou Créer un compte pour participer à la conversation.
- J-L Prout
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 28
- Remerciements reçus 0
il y a 3 mois 2 semaines #34980
par J-L Prout
Réponse de J-L Prout sur le sujet Controler les espaces de fin de chaine de caracteres
Mon message a la même portée que les quatre messages précédents. Ces messages ont été perturbés par un "i" entre crochets qui disparaissait et mettait la fin du texte en italique (d'où le "i").
J'aurais souhaité effaces ces autres messages, de sujet "Extraction des espaces de fin d'une chaîne de caractères", "Ecarter les espaces de fin de chaîne de caractères ("trailing spaces")" mais je ne suis pas le médiateur.
Merci d'oublier ces messages et de ne vous intéresser qu'à " Controler les espaces de fin de chaine de caracteres".
J'aurais souhaité effaces ces autres messages, de sujet "Extraction des espaces de fin d'une chaîne de caractères", "Ecarter les espaces de fin de chaîne de caractères ("trailing spaces")" mais je ne suis pas le médiateur.
Merci d'oublier ces messages et de ne vous intéresser qu'à " Controler les espaces de fin de chaine de caracteres".
Connexion ou Créer un compte pour participer à la conversation.
- J-L Prout
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 28
- Remerciements reçus 0
il y a 2 mois 4 semaines #35069
par J-L Prout
Réponse de J-L Prout sur le sujet Controler les espaces de fin de chaine de caracteres
J'ai trouvé une réponse qui me satisfait.
En réalité, il faut traiter l'expression avec 2 " -match " successifs, comme ceci:
[string] $Expression = ' Portez ce whisky au vieux juge blond qui fume '
If ( $Expression -match '^( *)(..*)$' ) { [string] $Expression_1 = $Matches[2]; }
Else { [string] $Expression_1 = $Expression };
If ( $Expression_1 -match '( *)$') { [string] $Expression_2 = ($Expression_1 -replace $Matches\[1\] , ''); }
Else { [string] $Expression_2 = $Expression_1 };
Write-Host 'MàP AVANT - Expression: "' , $Expression , '"' -separator '';
Write-Host 'MàP ENTRE - Expression: "' , $Expression_1 '"' -separator '';
Write-Host 'MàP APRÈS - Expression: "' , $Expression_2 , '"' -separator '';
On isole les espaces de début par le premier " -match ". avec '^( *)(..*)$'. On les écarte en ne gardant que $Masques[2].
Une fois les espaces éventuels de début supprimés, on lance un 2ème " -match" avec '( *)$'. On utilise un " -replace "..pour les remplacer par une chaîne vide.
Si, par hasard, il n'y a pas d'espaces de fin, " -replace " ne hurle pas!!
Il ne faut donc pas traiter par un seul " -match " avec la concaténation de '^( *)(..*)$' et de '( *)$' comme j'ai cherché à le faire avec '^( *)(..*)( *)$'..
Je trouve, tout de même un peu curieux de traiter différemment les espaces de début et les espaces de fin.
Comment fait-on avec les caractères arabes?
Qu'en pensent les spécialistes?
En réalité, il faut traiter l'expression avec 2 " -match " successifs, comme ceci:
[string] $Expression = ' Portez ce whisky au vieux juge blond qui fume '
If ( $Expression -match '^( *)(..*)$' ) { [string] $Expression_1 = $Matches[2]; }
Else { [string] $Expression_1 = $Expression };
If ( $Expression_1 -match '( *)$') { [string] $Expression_2 = ($Expression_1 -replace $Matches\[1\] , ''); }
Else { [string] $Expression_2 = $Expression_1 };
Write-Host 'MàP AVANT - Expression: "' , $Expression , '"' -separator '';
Write-Host 'MàP ENTRE - Expression: "' , $Expression_1 '"' -separator '';
Write-Host 'MàP APRÈS - Expression: "' , $Expression_2 , '"' -separator '';
On isole les espaces de début par le premier " -match ". avec '^( *)(..*)$'. On les écarte en ne gardant que $Masques[2].
Une fois les espaces éventuels de début supprimés, on lance un 2ème " -match" avec '( *)$'. On utilise un " -replace "..pour les remplacer par une chaîne vide.
Si, par hasard, il n'y a pas d'espaces de fin, " -replace " ne hurle pas!!
Il ne faut donc pas traiter par un seul " -match " avec la concaténation de '^( *)(..*)$' et de '( *)$' comme j'ai cherché à le faire avec '^( *)(..*)( *)$'..
Je trouve, tout de même un peu curieux de traiter différemment les espaces de début et les espaces de fin.
Comment fait-on avec les caractères arabes?
Qu'en pensent les spécialistes?
Connexion ou Créer un compte pour participer à la conversation.
- Christophe MELIN
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 28
- Remerciements reçus 4
il y a 2 mois 3 semaines #35082
par Christophe MELIN
Réponse de Christophe MELIN sur le sujet Controler les espaces de fin de chaine de caracteres
Salut,
Pourquoi ne pas essayer simplement $expression.trim() ?
Pourquoi ne pas essayer simplement $expression.trim() ?
Connexion ou Créer un compte pour participer à la conversation.
- J-L Prout
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 28
- Remerciements reçus 0
il y a 2 mois 3 semaines #35094
par J-L Prout
Réponse de J-L Prout sur le sujet Controler les espaces de fin de chaine de caracteres
Bonjour Christophe,
Bravo!!. Tu es de bon conseil.
Je ne connaissais pas cette méthode. Je viens de l'expérimenter. C'est exactement ce que je recherchais. Voilà donc une solution excellente et qui tient en une seule ligne.
J'aurai ainsi appris quelque chose qui va bien souvent me servir.
Merci beaucoup, Christophe.
On peut désormais clore le dossier.
Bravo!!. Tu es de bon conseil.
Je ne connaissais pas cette méthode. Je viens de l'expérimenter. C'est exactement ce que je recherchais. Voilà donc une solution excellente et qui tient en une seule ligne.
J'aurai ainsi appris quelque chose qui va bien souvent me servir.
Merci beaucoup, Christophe.
On peut désormais clore le dossier.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.105 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Controler les espaces de fin de chaine de caracteres