Quand vous récupérer un résultat sous forme d’array, le contenu est indexé

La sécurité avant tout

Quand vous récupérer un résultat ce n’est pas forcément un array, c’est le cas quand vous ne recevez qu’un résultat.

Exemple de problème :

$Test = "Toto" 
$Test[0]
T

Ici la variable est de type string et non pas array, la différence est que ce sont les caractères qui sont indexés

Comment faire ?

$Test = @("Toto")
$Test[0]
Toto

Ici on force le type array donc l’index 0 ne renvoie plus le premier caractère mais bien la première entrée de l’array

Exemple pratique:

Function Get-Toto {return "toto"}
#Le soucis de ne pas forcer le type:
(Get-Toto)[0]
# Le résultat: 
t

# La bonne méthode :
@(Get-Toto)[0]
# le résultat: 
toto

Ce n’est pas tout, avec le Select-Object pour pouvez aussi contourner ce problème, exemple:

Get-Toto | Select.Object -First 1

Vous voyez qu’avec l’index on appelle le 0, mais avec slect-object on fait -First 1. C’est parce qu’un index commence à zéro, donc le premier élément à l’index 0, le second l’index 1, …. Mais avec le select-object on ne lui demande de séléctionner l’index mais les le premier résultat, l’approche est différente, le résultat est le même

Maintenant que vous connaissez les bases, passons aux choses sérieuses

Sélectionner des lignes dans un fichier

Les 3 premières lignes

# 0..2 parce que l'index commence à 0, donc 0, 1, 2 ça fait trois lignes
@(Get-Content .\monFichier.txt)[0..2]
# OU
Get-Content .\MonFichier.txt | Select-Object -First 3

Les 5 dernières lignes

# Les nombres négatifs permettent d'attaquer l'index par la fin, le dernier élément étant -1
@(Get-Content .\MonFichier.txt)[-5..-1]
# OU
Get-Content | Select-Object -Last 5

Magique n’est ce pas ? Mais l’index est plus puissant que le Select-Object…

# On sélectionne la 15ème ligne (n'oubliez pas que l'index commence à 0)
@(Get-Content .\MonFichier.txt)[14]

Ici le Select-Object ne peux pas aider, on pourrait utiliser à la place un Where-Object mais dans le cas présent, ce serait sortir le basooka pour défoncer une mouche.

Vous voulez les lignes de 8 à 12 et la 15 ème et les deux dernières ? Pas de soucis !

@(Get-Content .\MonFichier.txt)[7..11 + 14 + -2..-1]

Magique !


0 commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *