Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

【PowerShell】テキストファイルの一括読み込み

3通りの方法がある。

  1. Get-Contentコマンドレットを使う
  2. Get-Content変数構文を使う
  3. System.IO名前空間のFileクラスのReadAllTextメソッドを使う

1と2は行単位で読み込むが、3は文字単位で読み込む。読み込み速度は早い順に3,2,1。以下はサイズが300万バイトのテキストファイル(「AB」と「あい」の行を繰り返すだけの合計60万行のシフトJISのテキストファイル、改行コードはCR+LF)を作成し、それぞれ読み込んだときの時間(秒)を計測、表示している。その後に読み込んで格納した配列の長さと1~3番目の要素を表示している。

PS D:\temp> "AB`r`nあい`r`n" * 3.e5 | Out-File -Encoding default -NoNewline .\text.txt
PS D:\temp> (Measure-Command {
>> $s = Get-Content .\text.txt}).TotalSeconds
4.876546
PS D:\temp> (Measure-Command {
>> $s = Get-Content .\text.txt}).TotalSeconds
5.4966804
PS D:\temp> $s.Length; $s[0..2]
600000
AB
あい
AB
PS D:\temp> (Measure-Command {
>> $s = ${d:\temp\text.txt}}).TotalSeconds
0.1765545
PS D:\temp> $s.Length; $s[0..2]
600000
AB
あい
AB
PS D:\temp> (Measure-Command {
>> $s = [IO.File]::ReadAllText("d:\temp\text.txt")}).TotalSeconds
0.0567449
PS D:\temp> $s.Length; $s[0..2]
3000000
A
B