テキストファイルを読む、保存する

テキストファイルを読む

System.IO.StreamReader を使って ReadLine() します。ファイルのエンコードを正しく指定して下さい。文字化けが起こったときは、下記のエンコーディングを試してください。

asciiアスキー7ビット文字セットのエンコード
bigendianunicodeビッグエンディアンの UTF-16 形式
oemMS-DOS およびコンソールプログラムの既定のエンコード
unicodeリトルエンディアンの UTF-16 形式
utf7UTF-7 形式
utf8BOMなし UTF-8 形式
utf8BOMBOMあり UTF-8 形式
utf8NoBOMBOMなし UTF-8 形式
utf32UTF-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