Lire les fichiers ligne par ligne dans Windows PowerShell

Marion Paul Kenneth Mendoza 30 janvier 2023
  1. Amélioration de la syntaxe de la cmdlet Get-Content
  2. Chargement de lignes spécifiques à l’aide de switch
  3. Utilisation de la classe [System.IO.File] dans PowerShell pour lire le fichier ligne par ligne
Lire les fichiers ligne par ligne dans Windows PowerShell

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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Article connexe - PowerShell File