Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use the StreamReader class in Powershell to find and count number of characters contained in a file?

Tags:

powershell

I'm new to powershell and have no experience with .net. I have a script that use
(get-content | select-string -pattern -allmatches).matches | measure-object
to find and count how many characters in a file. My script will work fine if the file only contain less than a 10k rows. Otherwise for big file, the RAM will shoot up to 100% and then the Powershell will display (Not Responding)

I did some research and I found out system.io.streamreader will work, I read a couple of questions in Stackoverflow and to find and match the character or word in a file you just need do this:

$file = get-item '<file path>'

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

[int]$line = 0

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

    if ( $read -match '<charcter>' ) {

        $line++

    }

}

but this is only returning the number of lines that contain the character, but not the number of characters in a file. So how do I use (select-string -inputobject -pattern -allmatches).matches | measure-object with the streamreader?

like image 720
gshtong Avatar asked Mar 09 '23 00:03

gshtong


1 Answers

You can use ToCharArray and where to find the matches. For example, to count the number of "e" in the file you can say:

$file = get-item '<file path>'

$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
}
like image 82
Sean Avatar answered May 06 '23 18:05

Sean