hakeの日記

Windows環境でプログラミングの勉強をしています。

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()