3 votes

Comment utiliser la classe StreamReader en PowerShell pour trouver et compter le nombre de caractères contenus dans un fichier ?

Je suis nouveau dans Powershell et je n'ai aucune expérience avec .NET. J'ai un script qui utilise
(get-content | select-string -pattern -allmatches).matches | measure-object
pour trouver et compter combien de caractères se trouvent dans un fichier. Mon script fonctionne bien si le fichier ne contient que moins de 10k lignes. Sinon, pour un gros fichier, la RAM montera à 100% et PowerShell affichera (Ne répond pas)

J'ai fait quelques recherches et découvert que system.io.streamreader fonctionnera. J'ai lu quelques questions sur Stackoverflow et pour trouver et faire correspondre le caractère ou le mot dans un fichier, vous avez juste à faire ceci :

$file = get-item ''

$reader = New-Object -TypeName System.IO.StreamReader -ArgumentList $file

[int]$ligne = 0

while ( $lire = $reader.ReadLine() ) {

    if ( $lire -match '' ) {

        $ligne++

    }

}

mais cela ne retourne que le nombre de lignes contenant le caractère, pas le nombre de caractères dans un fichier. Comment puis-je utiliser (select-string -inputobject -pattern -allmatches).matches | measure-object avec streamreader ?

3voto

Sean Points 22088

Vous pouvez utiliser ToCharArray et where pour trouver les correspondances. Par exemple, pour compter le nombre de "e" dans le fichier, vous pouvez dire :

$file = get-item ''

$reader = New-Object -TypeName System.IO.StreamReader -ArgumentList $file

[int]$count = 0

while ( $read = $reader.ReadLine() ) {

    $matches = ($read.ToCharArray() | where {$_ -eq 'e'}).Count
    $count = $count + $matches
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X