Lire le fichier ligne par ligne dans PowerShell

Je veux lire un fichier ligne par ligne dans PowerShell. Plus précisément, je veux parcourir le fichier, stocker chaque ligne dans une variable de la boucle et effectuer un traitement sur la ligne.

Je connais l’équivalent de Bash:

while read line do if [[ $line =~ $regex ]]; then # work here fi done < file.txt 

Pas beaucoup de documentation sur les boucles PowerShell.

    Pas beaucoup de documentation sur les boucles PowerShell.

    La documentation sur les boucles dans PowerShell est abondante et vous pouvez consulter les rubriques d’aide suivantes: about_For , about_ForEach , about_Do , about_While .

     foreach($line in Get-Content .\file.txt) { if($line -match $regex){ # Work here } } 

    Une autre solution idiomatique de PowerShell à votre problème consiste à diriger les lignes du fichier texte vers l’ ForEach-Object :

     Get-Content .\file.txt | ForEach-Object { if($_ -match $regex){ # Work here } } 

    Au lieu de faire correspondre les expressions rationnelles à l’intérieur de la boucle, vous pouvez diriger les lignes vers Where-Object pour filtrer uniquement celles qui vous intéressent:

     Get-Content .\file.txt | Where-Object {$_ -match $regex} | ForEach-Object { # Work here } 

    Get-Content a de mauvaises performances; il essaie de lire le fichier en mémoire en une seule fois.

    Le lecteur de fichiers C # (.NET) lit chaque ligne une par une

    Meilleure Performace

     foreach($line in [System.IO.File]::ReadLines("C:\path\to\file.txt")) { $line } 

    Ou

     [System.IO.File]::ReadLines("C:\path\to\file.txt") | ForEach-Object { $line } 

    L’instruction foreach sera probablement un peu plus rapide que ForEach-Object , mais c’est parce que le chargement en mémoire est généralement plus rapide.

    Par défaut, Get-Content lit toute la ligne dans un fichier texte et crée un tableau en sortie avec chaque ligne du texte en tant qu’élément dans ce tableau. Dans ce cas, le numéro d’index du tableau est égal au numéro de ligne du fichier texte . Nous pouvons donc obtenir chaque ligne du fichier txt en utilisant le numéro d’index du tableau.

    Vous pouvez boucler le tableau pour lire chaque ligne.

    $ TxtContent = Get-content -Path “C: \ path \ TestFile.txt”

    $ TxtContent 1
    $ TxtContent [2]

    [Reportez-vous pour un exemple complet]: http://dotnet-helpers.com/powershell-demo/reading-from-text-files-with-powershell/