PowerShell - テキストファイルの読み書き
書き込みはOut-Fileを使用する。文字列はパイプで渡すか、-InputObjectでオブジェクトを渡す。-Appendで追加書き込み。
読み込みはGet-Contentを使用する。各行毎の文字列の配列として変数に読み込まれる。ただし1行のみのファイルはStringになるため、GetType()のNameプロパティで確認が必要となる。
$file = ".\test.txt" # ファイルへの書き込み "1行目” | Out-File $file -Encoding default "2行目” | Out-File $file -Encoding default -Append # 追加書込モード Out-File $file -Encoding default -Append -InputObject "3行目” # ファイル読み込み(複数行) $txt = Get-Content $file $txt $txt.GetType() # IsPublic IsSerial Name BaseType # -------- -------- ---- -------- # True True Object[] System.Array $txt[1] # 2行目 # ファイル読み込み(1行) $txt = Get-Content $file $txt.GetType() #IsPublic IsSerial Name BaseType #-------- -------- ---- -------- #True True String System.Object
1行ずつの読み取り
.NETのStreamReaderを使用する。
StreamReaderは、System.IO.StreamReaderなのだけれども、Systemは省略できるっぽいです。ReadLineメソッドで1行ずつ読みとる動作を$nullになるまで繰り返す。
$path = Get-Location $file = "test.txt" $enc = [Text.Encoding]::Default # Shift_JIS $reader = New-Object IO.StreamReader(($path.Path + "\" + $file), $enc) while ( ($line = $reader.ReadLine()) -ne $null){ Write-Host $line } $reader.close()