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


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 !

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 :

  • Le point de départ, ce sera « $Debut+1 » : il faut ajouter +1 car sinon nous allons récupérer le « . » puisque $Debut contient la position du point.
  • Le nombre de caractères à conserver, ce sera « $Fin-$Debut-1 » : voilà, je vous ai perdu. Explications : pour savoir combien il y a de caractères à extraire, il suffit de faire une soustraction « $Fin – $Debut » (= 3) puisque cela donne l’écart entre les deux points de référence. Enfin, on fait « -1 » en complément pour éliminer le caractère de référence (« -« ) sur le même principe qu’avec $Debut. On obtient donc : 2, soit 2 caractères à extraire.

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 !

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.

Source link

Mourad ELGORMA

Fondateur de summarynetworks, passionné des nouvelles technologies et des métiers de Réseautique , Master en réseaux et système de télécommunications. ,j’ai affaire à Pascal, Delphi, Java, MATLAB, php …Connaissance du protocole TCP / IP, des applications Ethernet, des WLAN …Planification, installation et dépannage de problèmes de réseau informatique……Installez, configurez et dépannez les périphériques Cisco IOS. Surveillez les performances du réseau et isolez les défaillances du réseau. VLANs, protocoles de routage (RIPv2, EIGRP, OSPF.)…..Manipuler des systèmes embarqués (matériel et logiciel ex: Beaglebone Black)…Linux (Ubuntu, kali, serveur Mandriva Fedora, …). Microsoft (Windows, Windows Server 2003). ……Paquet tracer, GNS3, VMware Workstation, Virtual Box, Filezilla (client / serveur), EasyPhp, serveur Wamp,Le système de gestion WORDPRESS………Installation des caméras de surveillance ( technologie hikvision DVR………..). ,

Laisser un commentaire