先日500M程度のCSVファイルの件数をカウントする事になった際作成しました。もともと改行が含まれるデータをCSV出力する事になったらしく、改行コード(CR/LF)を『<改行>』という文字列に置き換えてファイル出力したとの事です。つまりデータ件数をカウントするにはこの『<改行>』文字列をカウントすればいいって事ですね。
はじめに
以下のようなCSVファイルがあったとします。
PS D:\sample> Get-Content .\test2.txt
1,にしかわ,10,西川<改行>2,あずま,20,東<改行>3,きたむら,30,北村<改行>4,みなみ,40,南<改行>
PS D:\sample>
スクリプト
対象文字列を空白に置き換えて、置き換え前の長さから引き算で導出するっていう考えです。
Param([String]$Path) $inputFile = $Path $findChar = "<改行>" #$inputFile = "D:\sample\test2.txt" # utf-8のときはこちら #$text=[System.IO.File]::ReadAllText($inputFile) # Shift_JISの時はこちら $text=[System.IO.File]::ReadAllText($inputFile,[System.Text.Encoding]::GetEncoding("shift_jis")) # 対象文字列を空白に置き換えて、置き換え前の長さから引き算で導出 ($text.Length - $text.Replace($findChar,"").Length)/$findChar.Length
実行結果
PS D:\sample> .\mojicount.ps1 D:\sample\test2.txt
4
PS D:\sample>