先日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>

