Lire les fichiers ligne par ligne dans Windows PowerShell
-
Amélioration de la syntaxe de la cmdlet
Get-Content
-
Chargement de lignes spécifiques à l’aide de
switch
-
Utilisation de la classe
[System.IO.File]
dans PowerShell pour lire le fichier ligne par ligne
Dans Windows PowerShell, nous pouvons utiliser la cmdlet Get-Content
pour lire des fichiers à partir d’un fichier. Cependant, la cmdlet chargera l’intégralité du contenu du fichier en mémoire en une seule fois, ce qui échouera ou se bloquera sur les fichiers volumineux.
Pour résoudre ce problème, nous pouvons lire les fichiers ligne par ligne, et cet article vous montrera comment.
Avant de commencer, il est préférable de créer un exemple de fichier texte avec plusieurs lignes. Par exemple, j’ai créé un file.txt
contenant les lignes suivantes.
file.txt
:
one
two
three
four
five
six
seven
eight
nine
ten
Selon Microsoft, une expression régulière est un modèle utilisé pour faire correspondre le texte. Il peut être composé de caractères littéraux, d’opérateurs et d’autres constructions. Cet article va essayer différents scripts impliquant une variable standard appelée Regular Expressions, notée $regex
.
Amélioration de la syntaxe de la cmdlet Get-Content
Nous avons d’abord discuté du fait que la cmdlet Get-Content
a ses défauts lorsque nous chargeons un fichier volumineux, car elle chargera le contenu du fichier en mémoire en une seule fois. Cependant, on peut l’améliorer en chargeant les lignes une par une à l’aide de la boucle foreach
.
Exemple de code :
foreach($line in Get-Content .\file.txt) {
if($line -match $regex){
Write-Output $line
}
}
Chargement de lignes spécifiques à l’aide de switch
Nous pouvons utiliser la variable $regex
pour saisir des lignes spécifiques dans notre fichier en créant une valeur $regex
personnalisée et en la faisant correspondre dans une fonction de changement de casse.
Exemple de code :
$regex = '^t'
switch -regex -file file.txt {
$regex { "line is $_" }
}
Production :
line is two
line is three
line is ten
Dans cet exemple, nous avons défini une valeur personnalisée de $regex
qui ne correspondra et n’affichera les lignes que si elle commence par le caractère t
.
Utilisation de la classe [System.IO.File]
dans PowerShell pour lire le fichier ligne par ligne
Si vous avez accès à la bibliothèque .NET, vous pouvez utiliser la classe [System.IO.File]
pour lire le contenu de votre fichier. C’est une excellente alternative à Get-Content
car vous n’aurez pas besoin d’expressions régulières pour gérer les fichiers ligne par ligne.
Exemple de code :
foreach($line in [System.IO.File]::ReadLines("C:\yourpathhere\file.txt"))
{
Write-Output $line
}
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn