Lire le fichier ligne par ligne dans PowerShell

je veux lire un fichier ligne par ligne en PowerShell. Spécifiquement, je veux boucler le fichier, stocker chaque ligne dans une variable de la boucle, et faire un peu de traitement sur la ligne.

je sais que le Bash équivalent:

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

peu de documentation sur les boucles PowerShell.

44
demandé sur Peter Mortensen 2015-11-04 03:37:45

3 réponses

peu de documentation sur les boucles PowerShell.

la Documentation sur les boucles dans PowerShell est abondante, et vous pourriez vouloir vérifier les sujets d'aide suivants: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 PowerShell à votre problème est de pipe les lignes du fichier texte à ForEach-Object applet de commande:

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

au lieu de regex matching à l'intérieur de la boucle, vous pourriez pipe les lignes à travers Where-Object pour filtrer uniquement ceux qui vous intéressent:

Get-Content .\file.txt | Where-Object {$_ -match $regex} | ForEach-Object {
    # Work here
}
73
répondu Mathias R. Jessen 2017-09-19 20:16:47

Get-Content a de mauvaises performances; il essaie de lire le fichier en mémoire tout d'un coup.

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

Meilleure Performance

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
}

foreach déclaration seront probablement un peu plus rapide que ForEach-Object, mais c'est parce que charger toute la chose en mémoire est généralement plus rapide.

18
répondu Kolob Canyon 2018-08-10 21:10:51

par défaut, Get-Content lit toute la ligne d'un fichier texte et crée un tableau comme sortie avec chaque ligne du texte comme é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"

$TxtContent1

$TxtContent[2]

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

1
répondu thiyagu selvaraj 2018-05-09 09:50:41