PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

PowerShell : manipuler les chaînes de caractères avec IndexOf et LastIndexOf

mercredi 6 octobre 2021 à 10:00

I. Présentation

Dans ce tutoriel, nous allons voir comment utiliser les méthodes IndexOf et LastIndexOf de PowerShell pour extraire une sous-chaîne (substring) d'une chaîne de caractères.

Précédemment, et sur le même thème, nous avions vu comment utiliser les méthodes Split() et Substring() de PowerShell. Avec IndexOf et LastIndexOf, nous allons pouvoir aller un peu plus loin dans l'utilisation de Substring() notamment.

II. PowerShell et IndexOf

La méthode IndexOf() permet de rechercher la position d'un caractère ou d'une chaîne au sein d'une chaîne de caractères. Elle va retourner la position de la première occurrence du caractère recherché ou de la chaîne recherchée. Ni plus ni moins.

Prenons un exemple avec la variable $URL :

$URL = "www.it-connect.fr"

Recherchons la position du caractère "." :

$URL.IndexOf(".")

On peut voir que la commande retourne "3", tout simplement. Cela signifie que le point a été trouvé à la position "3" de la chaîne de caractères. Ce qui est correct puisque le premier caractère de la chaîne correspond à l'index 0.

PowerShell et IndexOf()
PowerShell et IndexOf()

Comme je le disais, on peut également rechercher une chaîne de caractères. Par exemple, on peut rechercher "it" :

$URL.IndexOf("it")

Cette commande va retourner la valeur "4" : c'est bien le "i" qui est en 4ème position, ce qui correspond au début de la chaîne recherchée.

Si l'on recherche une chaîne et qu'elle n'a pas été trouvée, la valeur retournée sera "-1". La preuve en image :

Il faudra retenir que IndexOf() recherche la première occurrence la chaîne recherchée, en partant de l'index 0, de la gauche vers la droite.

III. PowerShell et LastIndexOf

La méthode LastIndexOf() permet de rechercher la dernière position d'un caractère ou d'une chaîne au sein d'une chaîne de caractères. La différence avec IndexOf() est subtile, mais importante : LastIndexOf recherche la dernière occurrence d'un caractère, et non pas la première.

Reprenons l'exemple précédent avec la variable $URL :

$URL = "www.it-connect.fr"

Puis, cette fois-ci, utilisons LastIndexOf :

$URL.LastIndexOf(".")

On peut voir que la commande retourne le résultat "14" : ce qui correspond à la position du point de ".fr".

PowerShell et LastIndexOf()
PowerShell et LastIndexOf()

Dans le même esprit, nous pouvons rechercher une chaîne de plusieurs caractères et dans le cas où la chaîne est introuvable, le résultat "-1" sera retourné.

IV. PowerShell : exemples d'utilisation IndexOf et LastIndexOf

Maintenant que nous avons à quoi servait IndexOf() et LastIndexOf(), il est temps de voir ce que ça peut donner dans la pratique !

A. PowerShell : extraire une chaîne comprise entre deux caractères

Reprenons notre variable $URL :

$URL = "www.it-connect.fr"

L'objectif va être le suivant : récupérer la chaîne comprise entre le premier point et le tiret. Autrement dit, obtenir la valeur "it".

Commençons par récupérer la position du premier point :

$Debut = $URL.IndexOf(".")

Résultat : la variable $Debut est égale à 3.

Et celle du tiret :

$Fin = $URL.LastIndexOf("-")

Résultat : la variable $Fin est égal à 6.

Maintenant que l'on connaît le point de départ dans la chaîne et la fin, il faut que l'on récupère ce qu'il y a entre deux. Pour cela, nous allons utiliser la méthode Substring().

Pour rappel, Substring() permet d'extraire une sous-chaîne d'une chaîne de caractères en précisant : l'index de départ (StartIndex) et le nombre de caractères après cet index.

On peut considérer que :

Si l'on traduit tout cela en PowerShell, on obtient la ligne suivante :

$URL.Substring($Debut+1,$Fin-$Debut-1)

On obtient bien la valeur "it" en retour, cela fonctionne ! Vous pouvez vous amuser à tester avec d'autres combinaisons.

Dans le cas où l'on aurait recherché la chaîne comprise entre les deux points, on aurait pu le faire avec avec Split() en récupérant le deuxième membre (index 1) du tableau obtenu :

($URL.Split("."))[1]

Ce que nous venons de voir est peut-être l'exemple le plus "puissant" avec IndexOf(), LastIndexOf() et Substring(). Si vous en connaissez d'autres, n'hésitez pas à les partager en commentaire !

B. Extraire une chaîne par la gauche

En combinant l'utilisation de Substring() et IndexOf() ou LastIndexOf(), on peut extraire une partie d'une chaîne en partant du début. L'idée est la suivante : extraire le sous-domaine de notre URL, donc tout ce qui est avant le premier point.

$URL = "www.it-connect.fr"

On récupère la position du premier point :

$Debut = $URL.IndexOf(".")

Ensuite, avec Substring() on part du premier caractère correspond à l'index 0 et on récupère le nombre de caractères définit dans $Debut. Comme on part de l'index 0, il n'est pas nécessaire de faire +1.

Ce qui donne :

$URL.Substring(0,$Debut)

Résultat, j'obtiens la valeur "www" : c'est correct !

Ce tutoriel sur IndexOf() et LastIndexOf() touche à sa fin, vous avez deux cordes supplémentaires à votre arc lorsqu'il s'agit de manipuler les chaînes de caractères en PowerShell. Je dois avouer que Split() et Substring() restent ceux que j'utilise le plus souvent.

The post PowerShell : manipuler les chaînes de caractères avec IndexOf et LastIndexOf first appeared on IT-Connect.