Recherche de site Web

Lire un fichier ligne par ligne dans PowerShell


Nous pouvons utiliser PowerShell pour lire un fichier ligne par ligne, qu'il s'agisse d'un fichier texte ou d'un fichier CSV. Cette méthode nous permet de traiter les informations de chaque ligne du fichier individuellement.

Pour lire un fichier, nous utilisons la cmdlet Get-Content dans PowerShell. Cette cmdlet affichera des objets (le contenu) un par un dans le pipeline. Mais si vous l'assignez à une variable, le contenu sera alors stocké dans un tableau.

Dans cet article, je vais vous montrer comment utiliser la cmdlet Get-Content pour lire un fichier ligne par ligne avec quelques exemples et donner des conseils pour travailler avec des fichiers plus volumineux.

Lire un fichier ligne par ligne

Pour lire le contenu d'un fichier texte dans PowerShell, vous pouvez utiliser la commande Get-Content. Par défaut, cette commande renverra chaque ligne du fichier texte sous forme de chaîne séparée dans le pipeline. Cela signifie que vous pouvez traiter chaque ligne immédiatement après qu'elle ait été lue par PowerShell.

Par exemple, pour lire le contenu du fichier texte « file1.txt » et afficher chaque ligne dans la console, nous pouvons faire :

Get-Content -path "C:\temp\File1.txt" | ForEach-Object {
    Write-Host "The content of this line is - $_"
}

Une autre option consiste à assigner les résultats à une variable. Dans ce cas, chaque ligne sera stockée dans un tableau sous forme de chaîne, vous permettant de l'itérer plus tard :

$file1 = Get-Content -path "C:\temp\File1.txt"

ForEach($line in $file1) {
    Write-Host $line
}

Il y a cependant une note importante à faire ici. Si le fichier ne contient qu'une seule ligne de texte, alors le contenu est stocké en tant que chaîne, et non en tant que tableau. Dans la plupart des situations, cela ne posera pas de problème, mais si vous, par exemple, souhaitez obtenir la première ligne du tableau, alors vous pourriez obtenir des résultats inattendus :

$file1 = Get-Content -path "C:\temp\File1.txt"

Return the first line:
Write-Host $file1[0]

Result : Line 1: This is the first line of the file.

$file2 = Get-Content -path "C:\temp\File2.txt"
Return the first line:
Write-Host $file2[0]

Result : T

Pour éviter cela, nous pouvons utiliser l'opérateur de sous-expression de tableau, qui garantit que le résultat est toujours un tableau :

$arrayFromFile = @(Get-Content -path "C:\temp\File2.txt")

or cast an array:
[array]$arrayFromFile = @Get-Content -path "C:\temp\File2.txt"

Lire de grands fichiers

Lorsque vous devez lire de gros fichiers, ou lorsque la performance en général est une préoccupation, il vaut mieux utiliser la méthode .NET directe pour lire les fichiers.

Il est important de noter que lorsque vous utilisez la méthode .NET, vous devez toujours utiliser le chemin absolu vers le fichier, au lieu du chemin relatif. La raison en est que la méthode .NET a parfois un répertoire de travail différent de celui de PowerShell.

$arrayFromFileNET = [IO.File]::ReadAllLines("C:\temp\File2.txt")

J'ai effectué des tests pour mesurer la différence entre les deux méthodes, et la méthode .NET est presque 10 fois plus rapide que la méthode Get-Content. Pour le test, j'ai utilisé un fichier journal de 13 Mo et j'ai exécuté chaque test 5 fois pour obtenir une bonne moyenne.

Lire seulement la première ou la dernière ligne

Parfois, vous n'avez pas besoin de lire toutes les lignes d'un fichier texte, mais vous pourriez vouloir lire seulement la première ou la dernière ligne du fichier. Pour ce faire, nous pouvons utiliser les paramètres -First et -Tail de la cmdlet Get-Content.

Pour lire la dernière ligne d'un fichier texte :

Get-Content -Path "C:\temp\File1.txt" -Tail 1

Et pour ne lire que la première ligne, vous pouvez faire :

Get-Content -Path "C:\temp\File1.txt" -First 1

Vous pouvez augmenter le nombre pour atteindre les premières n ou les dernières n de lignes d'un fichier.

Conclure

Dans la plupart des cas, la cmdlet Get-Content est la meilleure option pour lire un fichier ligne par ligne dans PowerShell. Mais lorsque vous devez traiter de gros fichiers, il vaut vraiment la peine d'utiliser la méthode .NET à la place. C'est beaucoup plus rapide comparé aux cmdlets PowerShell.

J'espère que cet article vous plaît, assurez-vous de télécharger la feuille de triche PowerShell gratuite et si vous avez des questions, laissez simplement un commentaire ci-dessous.