Comment lire des fichiers ligne par ligne dans Windows PowerShell
-
Lire un fichier ligne par ligne dans PowerShell en utilisant
Get-Contentavec une boucleForEach -
Lire un fichier ligne par ligne dans PowerShell en utilisant
Get-ContentavecForeach-Object -
Utiliser la classe
[System.IO.File]dans PowerShell pour lire le fichier ligne par ligne -
Utiliser la classe
System.IO.StreamReaderdans PowerShell pour lire le fichier ligne par ligne - Conclusion
Dans Windows PowerShell, nous pouvons utiliser la cmdlet Get-Content pour lire des fichiers à partir d’un fichier. Cependant, la cmdlet chargera tout le contenu du fichier en mémoire d’un coup, ce qui échouera ou se figera avec de grands fichiers.
Pour résoudre ce problème, ce que nous pouvons faire est de lire les fichiers ligne par ligne, et cet article vous montrera comment.
Avant de commencer, il est préférable de créer un fichier texte d’exemple 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 motif utilisé pour correspondre au texte. Elle peut être constituée de caractères littéraux, d’opérateurs et d’autres constructions. Cet article essayera différents scripts impliquant une variable standard appelée Expressions Régulières, notée par $regex.
Lire un fichier ligne par ligne dans PowerShell en utilisant Get-Content avec une boucle ForEach
Nous avons d’abord discuté que la cmdlet Get-Content a ses défauts quand nous chargeons un grand fichier car cela chargera le contenu du fichier dans la mémoire en une seule fois. Cependant, nous pouvons l’améliorer en chargeant les lignes une par une en utilisant la boucle foreach.
Exemple de code :
foreach ($line in Get-Content .\file.txt) {
if ($line -match $regex) {
Write-Output $line
}
}
Voici une explication étape par étape du processus :
-
Obtenir le contenu du fichier :
Nous commençons par utiliser la cmdlet
Get-Contentpour lire le contenu du fichier.Get-Content .\file.txtRemplacez
"file.txt"par le chemin vers votre fichier. -
Itérer sur chaque ligne :
Ensuite, nous utilisons une boucle
ForEachpour itérer sur chaque ligne du fichier. La boucle attribue chaque ligne à une variable,$line, une à la fois.À l’intérieur de la boucle, vous pouvez remplacer
Write-Host $linepar le code qui traite chaque ligne selon vos besoins. Dans cet exemple, nous affichons simplement chaque ligne en utilisantWrite-Host, mais vous pouvez effectuer toutes les actions souhaitées.
Lire un fichier ligne par ligne dans PowerShell en utilisant Get-Content avec Foreach-Object
Pour lire un fichier ligne par ligne dans PowerShell en utilisant Get-Content avec Foreach-Object, suivez ces étapes :
-
Utilisez la cmdlet
Get-Content:Nous commençons par utiliser la cmdlet
Get-Contentpour lire le contenu du fichier. La cmdletGet-Contentlit chaque ligne du fichier et les sort en tant qu’objets dans un pipeline.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
Remplacez "example.txt" par le chemin vers votre fichier.
-
Boucle Foreach-Object :
Ensuite, nous utilisons la cmdlet
Foreach-Object(%est un alias pourForeach-Object) pour itérer sur chaque ligne dans le pipeline. À l’intérieur du bloc de script (le code dans{}), vous pouvez traiter chaque ligne en utilisant$_, qui représente la ligne actuelle en cours de traitement.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }Dans cette boucle, vous pouvez effectuer toutes les actions dont vous avez besoin sur chaque ligne.
Exemple complet de code fonctionnel
Voici un exemple complet de code fonctionnel qui lit un fichier ligne par ligne et affiche chaque ligne :
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
# Read the file line by line and process each line
Get-Content -Path $filePath | ForEach-Object {
# Process each line here
Write-Host $_
}
} else {
Write-Host "File not found: $filePath"
}
Dans ce code :
- Nous spécifions le chemin vers le fichier en utilisant la variable
$filePath. - Nous utilisons la cmdlet
Test-Pathpour vérifier si le fichier existe. - Si le fichier existe, nous utilisons
Get-Contentpour lire son contenu et le passer àForeach-Objectpour le traitement. - À l’intérieur du bloc de script
Foreach-Object, nous utilisonsWrite-Host $_pour afficher chaque ligne.
Utiliser la classe [System.IO.File] dans PowerShell pour lire le fichier ligne par ligne
Pour lire un fichier ligne par ligne dans PowerShell en utilisant la classe [System.IO.File], suivez ces étapes :
-
Spécifiez le chemin du fichier :
Commencez par spécifier le chemin vers le fichier que vous souhaitez lire. Remplacez
"example.txt"par le chemin réel vers votre fichier.powershellCopy code $filePath = "example.txt" -
Vérifiez si le fichier existe :
Avant d’essayer de lire le fichier, il est bon de vérifier si le fichier existe en utilisant la cmdlet
Test-Path:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Lire le fichier ligne par ligne :
Une fois que vous avez vérifié que le fichier existe, vous pouvez utiliser la classe
[System.IO.File]pour lire le fichier ligne par ligne. Voici le code pour cela :powershellCopy codetry { $lines = [System.IO.File]::ReadLines($filePath) foreach ($line in $lines) { # Process each line here Write-Host $line } } catch { Write-Host "Error reading the file: $_" }Dans ce code :
- Nous utilisons la méthode
ReadLinesde la classe[System.IO.File]pour lire le fichier ligne par ligne, et nous stockons les lignes dans la variable$lines. - Nous utilisons ensuite une boucle
foreachpour itérer sur chaque ligne dans$lineset la traiter. Dans cet exemple, nous affichons simplement chaque ligne en utilisantWrite-Host, mais vous pouvez effectuer toutes les actions souhaitées.
- Nous utilisons la méthode
Exemple complet de code fonctionnel
Voici un exemple complet de code fonctionnel qui lit un fichier ligne par ligne et affiche chaque ligne :
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
try {
# Read the file line by line
$lines = [System.IO.File]::ReadLines($filePath)
foreach ($line in $lines) {
# Process each line here
Write-Host $line
}
} catch {
Write-Host "Error reading the file: $_"
}
} else {
Write-Host "File not found: $filePath"
}
Dans ce code :
- Nous spécifions le chemin vers le fichier en utilisant la variable
$filePath. - Nous vérifions si le fichier existe en utilisant
Test-Path. - Si le fichier existe, nous utilisons la méthode
[System.IO.File]::ReadLines()pour lire le fichier ligne par ligne et traiter chaque ligne en utilisant une boucleforeach. - Nous incluons la gestion des erreurs pour capturer toute exception qui pourrait survenir lors de la lecture du fichier.
Utiliser la classe System.IO.StreamReader dans PowerShell pour lire le fichier ligne par ligne
Pour lire un fichier ligne par ligne dans PowerShell en utilisant la classe System.IO.StreamReader, suivez ces étapes :
-
Spécifiez le chemin du fichier :
Commencez par spécifier le chemin vers le fichier que vous souhaitez lire. Remplacez
"example.txt"par le chemin réel vers votre fichier.powershellCopy code $filePath = "example.txt" -
Vérifiez si le fichier existe :
Avant d’essayer de lire le fichier, il est bon de vérifier si le fichier existe en utilisant la cmdlet
Test-Path:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" } -
Lire le fichier ligne par ligne :
Une fois que vous avez vérifié que le fichier existe, vous pouvez utiliser la classe
System.IO.StreamReaderpour lire le fichier ligne par ligne. Voici le code pour cela :
powershellCopy codetry {
$reader = [System.IO.StreamReader]::new($filePath)
while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine()
# Process each line here
Write-Host $line
}
$reader.Close()
} catch {
Write-Host "Error reading the file: $_"
}
Dans ce code :
- Nous créons une nouvelle instance de
System.IO.StreamReaderen utilisant[System.IO.StreamReader]::new($filePath), où$filePathest le chemin vers le fichier. - Nous utilisons une boucle
whilepour lire le fichier ligne par ligne. La condition$reader.Peek() -ge 0assure que nous continuons à lire jusqu’à ce que la fin du fichier soit atteinte. - À l’intérieur de la boucle, nous utilisons
$reader.ReadLine()pour lire chaque ligne et la traiter selon les besoins. Dans cet exemple, nous affichons simplement chaque ligne en utilisantWrite-Host, mais vous pouvez effectuer toutes les actions souhaitées. - Enfin, nous fermons le
StreamReaderen utilisant$reader.Close()pour libérer les ressources du fichier.
Exemple complet de code fonctionnel
Voici un exemple complet de code fonctionnel qui lit un fichier ligne par ligne et affiche chaque ligne :
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
try {
# Create a StreamReader to read the file
$reader = [System.IO.StreamReader]::new($filePath)
# Read the file line by line
while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine()
# Process each line here
Write-Host $line
}
# Close the StreamReader
$reader.Close()
} catch {
Write-Host "Error reading the file: $_"
}
} else {
Write-Host "File not found: $filePath"
}
Dans ce code :
- Nous spécifions le chemin vers le fichier en utilisant la variable
$filePath. - Nous vérifions si le fichier existe en utilisant
Test-Path. - Si le fichier existe, nous créons une instance de
System.IO.StreamReaderpour lire le fichier ligne par ligne et traiter chaque ligne en utilisant une bouclewhile. - Nous incluons la gestion des erreurs pour capturer toute exception qui pourrait survenir lors de la lecture du fichier.
Conclusion
En résumé, PowerShell fournit plusieurs méthodes polyvalentes pour lire des fichiers ligne par ligne, répondant à divers besoins en matière de scripts et d’automatisation. Get-Content avec une boucle ForEach est un choix convivial pour des tâches simples, offrant simplicité et lisibilité. Get-Content avec Foreach-Object améliore la flexibilité, le rendant adapté à des opérations plus complexes et à des tâches de filtrage au sein du pipeline.
Pour des scénarios nécessitant un contrôle accru et une gestion des erreurs complète, la classe [System.IO.File] offre une solution puissante. Cette méthode vous permet de peaufiner les opérations sur les fichiers et de gérer les exceptions avec grâce, la rendant bien adaptée pour des scripts robustes et résistants aux erreurs.
Dans les situations où vous traitez de grands fichiers et où l’efficacité de la mémoire est cruciale, la classe System.IO.StreamReader est mise en avant. Elle permet de lire des fichiers de manière efficace tout en gérant les ressources mémoire plus efficacement, garantissant ainsi un traitement fluide de jeux de données substantiels.
En fin de compte, le choix de la méthode dépend de vos exigences spécifiques en matière de script, de la taille du fichier et de la complexité du traitement. En utilisant ces méthodes, vous pouvez lire des fichiers ligne par ligne dans PowerShell en répondant efficacement à un large éventail de tâches liées aux fichiers dans vos flux de travail d’automatisation.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedInArticle connexe - PowerShell File
- Comment créer un fichier texte en utilisant Windows PowerShell
- Comment débloquer des fichiers en utilisant PowerShell
- Comment obtenir la taille d'un fichier en Ko en utilisant PowerShell
- Comment obtenir la version du fichier dans PowerShell
- Comment stocker le contenu d'un fichier texte dans une variable en utilisant PowerShell
- Comment télécharger des fichiers avec FTP dans PowerShell
