Comment utiliser la méthode Trim de PowerShell pour nettoyer une chaîne de caractères ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à utiliser la méthode de Trim() de PowerShell qui va s'avérer très utile pour nettoyer une chaine de caractères, que ce soit pour supprimer les espaces inutiles, ou un autre type de caractères.
La méthode Trim() est intégrée nativement dans PowerShell, ainsi que dans d'autres langages, et elle est généralement utilisée pour supprimer les espaces au début et à la fin d'une chaîne de caractères. Ces espaces indésirables peuvent correspondre à un espace unique, mais aussi à une tabulation.
Elle est utile dans différents scénarios, notamment quand le script demande à l'utilisateur de saisir quelque chose (via un Read-Host) ou que vous traitez des données récupérées à partir d'un fichier source.
II. Exemples d'utilisation de Trim()
A. Supprimer les espaces
Nous allons commencer par utiliser la méthode Trim() de PowerShell pour éliminer les espaces en début et en fin de chaînes de caractères.
Voici la chaine de caractères que nous allons manipuler :
$Texte = " Tutoriel pour IT-Connect "
Nous pouvons constater qu'il y a des espaces à trois endroits : avant le texte (2), après le texte (2), et entre chaque mot. Puisque les espaces sont en quelque sorte "invisibles", nous allons obtenir la longueur de cette chaine de caractères via la propriété "Length".
$Texte.Length
# Résultat actuel :
28
Maintenant, nous allons appliquer la méthode Trim() sur cette chaine de caractères, stocker, le résultat dans une variable et calculer la longueur de la nouvelle chaine obtenue.
$TexteTrim = $Texte.Trim()
$TexteTrim.Length
Cette fois-ci, nous obtenons une valeur différente : 24 au lieu de 28. En effet, la méthode Trim() a supprimé les espaces avant et après le texte, qui sont inutiles, tout en conservant les espaces entre les mots, qui eux sont utiles !
Testez par vous-même avec ces quelques lignes de code :
Write-Host "Sans la méthode Trim()" -ForegroundColor Green
$Texte = " Tutoriel pour IT-Connect "
$Texte
$Texte.Length
Write-Host "Avec la méthode Trim()" -ForegroundColor Green
$TexteTrim = $Texte.Trim()
$TexteTrim
$TexteTrim.Length
Ce qui donne :
B. Supprimer le caractère de votre choix
Par défaut, Trim() supprime les espaces inutiles (espace, tabulation). Sachez que vous pouvez l'utiliser pour supprimer un caractère spécial de votre choix. Imaginons que nous souhaitons éliminer les "#" en début et fin de chaînes de caractères. Il suffirait d'utiliser la méthode Trim() de cette façon :
$Texte.Trim("#")
Vous pouvez tester avec ce bout de code où les espaces sont remplacés par le symbole "#" pour cette démonstration.
Write-Host "Sans la méthode Trim()" -ForegroundColor Green
$Texte = "##Tutoriel pour IT-Connect##"
$Texte
$Texte.Length
Write-Host "Avec la méthode Trim()" -ForegroundColor Green
$TexteTrim = $Texte.Trim("#")
$TexteTrim
$TexteTrim.Length
Ce qui donne bien le résultat attendu :
Il est important de préciser que dans ce cas, Trim() va supprimer les caractères "#" mais il va conserver les espaces éventuels.
C. Supprimer plusieurs types de caractères
Si vous souhaitez utiliser la méthode Trim() pour supprimer les espaces, ainsi que d'autres caractères, sachez que c'est possible. Dans ce cas, vous devez simplement ajouter dans les parenthèses cette liste de caractères.
Dans l'exemple ci-dessous, nous allons chercher à éliminer les espaces, les "#" et les "?". Voici un bout de code pour tester :
Write-Host "Sans la méthode Trim()" -ForegroundColor Green
$Texte = "## Tutoriel pour IT-Connect ?"
$Texte
$Texte.Length
Write-Host "Avec la méthode Trim()" -ForegroundColor Green
$TexteTrim = $Texte.Trim("#? ")
$TexteTrim
$TexteTrim.Length
Ce qui donne :
Voilà, nous obtenons bien le résultat attendu ! Sachez que Trim() fonctionne aussi avec les lettres et les chiffres. Cette méthode n'est pas réservée aux caractères spéciaux même si nous l'utilisons souvent dans ce but.
Remarque : la méthode Trim() peut également être utilisée pour supprimer un caractère à partir de son code Unicode. Dans ce cas, et si vous avez ce besoin particulier, il faut adopter la syntaxe suivante : $Texte.Trim([char]0x0061). Ce code correspond à la lettre "a".
D. TrimStart() et TrimEnd()
La méthode Trim() est très pratique, mais elle effectue systématiquement le nettoyage au début et à la fin de la chaîne de caractères. Si vous avez besoin de supprimer uniquement les espaces ou les caractères inutiles au début de la chaîne, ou à l'inverse, à la fin de la chaîne, sachez que vous pouvez utiliser ces deux méthodes :
- TrimStart() pour les caractères au début de la chaîne
- TrimEnd() pour les caractères à la fin de la chaine
La méthode TrimEnd() est utile lorsque l'on manipule des chemins pour supprimer le dernier "\" qui peut être ajouté à la suite du dernier répertoire, ce qui permettra facilement de venir ajouter le nom d'un autre répertoire en le préfixant par "\" sans risquer de se retrouver avec un double "\\". Ceci nous permet de contrôler que le chemin aura bien le format attendu : si ce chemin est fourni par une saisie utilisateurs, vous avez une chance sur deux que le "\" à la fin soit présent. Avec TrimEnd(), ce problème potentiel est éliminé.
Voici un exemple où l'on élimine le caractère "\", ce qui oblige à rajouter un caractère d'échappement :
$Chemin = "C:\TEMP\"
$Chemin.TrimEnd("/\")
# Résultat :
C:\TEMP
Ces deux méthodes fonctionnent sur le même principe et apportent un peu plus de souplesse.
III. Conclusion
Avec PowerShell, la méthode Trim() fait partie des incontournables, au même type que d'autres méthodes que j'ai l'habitude d'utiliser fréquemment : Split(), Substring(), etc.
les regex sont expliqué ici pour la partie #?
https://learn.microsoft.com/fr-fr/dotnet/standard/base-types/regular-expressions
par contre trop bizarre d’habitude le ? en regex signifie 0 ou 1 fois
mais dans la doc il dise leminimum possiblecar par defaut les regex sont gourmande (elle vont au plus loin)
https://www.debuggex.com/cheatsheet/regex/pcre