Comment lire des fichiers ligne par ligne dans Windows PowerShell

  1. Lire un fichier ligne par ligne dans PowerShell en utilisant Get-Content avec une boucle ForEach
  2. Lire un fichier ligne par ligne dans PowerShell en utilisant Get-Content avec Foreach-Object
  3. Utiliser la classe [System.IO.File] dans PowerShell pour lire le fichier ligne par ligne
  4. Utiliser la classe System.IO.StreamReader dans PowerShell pour lire le fichier ligne par ligne
  5. Conclusion
Comment lire des fichiers ligne par ligne dans Windows PowerShell

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 :

  1. Obtenir le contenu du fichier :

    Nous commençons par utiliser la cmdlet Get-Content pour lire le contenu du fichier.

    Get-Content .\file.txt
    

    Remplacez "file.txt" par le chemin vers votre fichier.

  2. Itérer sur chaque ligne :

    Ensuite, nous utilisons une boucle ForEach pour 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 $line par le code qui traite chaque ligne selon vos besoins. Dans cet exemple, nous affichons simplement chaque ligne en utilisant Write-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 :

  1. Utilisez la cmdlet Get-Content :

    Nous commençons par utiliser la cmdlet Get-Content pour lire le contenu du fichier. La cmdlet Get-Content lit 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.

  1. Boucle Foreach-Object :

    Ensuite, nous utilisons la cmdlet Foreach-Object (% est un alias pour Foreach-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-Path pour vérifier si le fichier existe.
  • Si le fichier existe, nous utilisons Get-Content pour lire son contenu et le passer à Foreach-Object pour le traitement.
  • À l’intérieur du bloc de script Foreach-Object, nous utilisons Write-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 :

  1. 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"
    
  2. 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"
    }
    
  1. 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 ReadLines de 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 foreach pour itérer sur chaque ligne dans $lines et la traiter. Dans cet exemple, nous affichons simplement chaque ligne en utilisant Write-Host, mais vous pouvez effectuer toutes les actions souhaitées.

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 boucle foreach.
  • 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 :

  1. 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"
    
  2. 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"
    }
    
  3. Lire le fichier ligne par ligne :

    Une fois que vous avez vérifié que le fichier existe, vous pouvez utiliser la classe System.IO.StreamReader pour 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.StreamReader en utilisant [System.IO.StreamReader]::new($filePath), où $filePath est le chemin vers le fichier.
  • Nous utilisons une boucle while pour lire le fichier ligne par ligne. La condition $reader.Peek() -ge 0 assure 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 utilisant Write-Host, mais vous pouvez effectuer toutes les actions souhaitées.
  • Enfin, nous fermons le StreamReader en 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.StreamReader pour lire le fichier ligne par ligne et traiter chaque ligne en utilisant une boucle while.
  • 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.

Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Article connexe - PowerShell File