テキストファイルを読む、保存する
テキストファイルを読む
System.IO.StreamReader を使って ReadLine() します。ファイルのエンコードを正しく指定して下さい。文字化けが起こったときは、下記のエンコーディングを試してください。
ascii | アスキー7ビット文字セットのエンコード |
bigendianunicode | ビッグエンディアンの UTF-16 形式 |
oem | MS-DOS およびコンソールプログラムの既定のエンコード |
unicode | リトルエンディアンの UTF-16 形式 |
utf7 | UTF-7 形式 |
utf8 | BOMなし UTF-8 形式 |
utf8BOM | BOMあり UTF-8 形式 |
utf8NoBOM | BOMなし UTF-8 形式 |
utf32 | UTF-32 形式 |
# 開きたいテキストファイルのファイルパス.
$filepath = "c:/tmp/test_read.txt"
# ストリームリーダーを生成する.
$enc = [System.Text.Encoding]::GetEncoding( "utf-8" )
$sr = New-Object System.IO.StreamReader( $filepath, $enc )
# 行数のカウンタをゼロリセット.
$counter = 0
# 読み込んだ行が NULL になるまで無限ループする.
for (;;)
{
$line = $sr.ReadLine()
# 読み込んだ行が NULL の場合に脱出する.
if ( $line -eq $null )
{
break
}
$str_out = "[{0}] is {1}" -f $counter, $line
Write-Host( $str_out )
$counter++
}
$sr.Close()
Write-Host( "finish." )
下記が実行結果です。
[0] is Miles Davis
[1] is Wayne Shorter
[2] is Herbie Hancock
[3] is Ron Carter
[4] is Tonny Williams
finish.
テキストファイルを保存する
System.IO.StreamWriter を使って WriteLine() します。ファイルを新規作成する場合は第2引数を $false にします。ファイルの内容に追加する場合は $true にします。
# 開きたいテキストファイルのファイルパス.
$filepath = "c:/tmp/test_write.txt"
# ストリームライターを生成する.
# $false でファイル新規作成, $true でファイルに追加.
# エンコーディングを BOM なしの UTF-8 にする.
$flag_add = $false
$enc = [System.Text.Encoding]::GetEncoding( "utf-8" )
$sw = New-Object System.IO.StreamWriter( $filepath, $flag_add, $enc )
# 書き込む行数.
$num_loop = 16
# ループで書き込む.
for ( $n = 0; $n -lt $num_loop; $n++ )
{
# ループ変数の100倍を書き込みたい.
$value = [string]( $n * 100 )
# 書き込む文字列をタブ区切りで作る.
$line = "{0}`t{1}" -f $n, $value
# タブ区切りで作成した文字列を一行書き込む.
$sw.Writeline( $line )
}
# ストリームライターを閉じる.
$sw.Close()
Write-Host( "finish." )
下記が実行結果です。タブ区切りになっています。
0 0
1 100
2 200
3 300
4 400
5 500
6 600
7 700
8 800
9 900
10 1000
11 1100
12 1200
13 1300
14 1400
15 1500