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.
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
}
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.
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/