CodeZine(コードジン)

特集ページ一覧

Windows PowerShell 活用編(6)
.NET Frameworkによるファイルの読み書き

StreamReaderクラスとStreamWriterクラスの利用

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/03/09 14:00

目次

ファイルをすべて読み込む

 ReadToEndメソッドを使用すると、ストリームの現在位置からファイルの終端までを読み込むことができます。

 ファイルの終端まで読み込んだ結果を変数に保存するには下記のようにします。

PS> $contents = $sr.ReadToEnd()

 ReadToEndメソッドで読み込みを行うと、ストリームの現在位置はファイルの終端に移動するため、これ以降読み取り操作は行えません。

 Closeメソッドを使用してストリームを閉じます。

1行ずつ読み込む

 ReadLineメソッドを使用するとファイルを1行ずつ読み込むことができます。

 試しに下記のテキストファイル(aiueo.txtとしてShift-JISで保存)で1行ずつ読み込みを行います。

あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの

 下記のようにしてインスタンスを作成します。

PS> $sr = New-Object System.IO.StreamReader("C:\Work\aiueo.txt",[Text.Encoding]::GetEncoding("Shift_Jis"))

 1行ずつ読み込むためにReadLineメソッドを実行します。

PS> $sr.ReadLine()
あいうえお

 ReadLineメソッドは1行読み込むとストリームの現在位置を次へ進めます。このため、もう1度ReadLineメソッドを実行するとテキストファイルの2行目を読み込みます。

PS> $sr.ReadLine()
かきくけこ

 ファイルサイズが大きい場合には、このように毎回ReadLineメソッドを実行するのは現実的ではないため、通常はループによる読み取りを行います。

 ReadLineメソッドは読み出す行がない場合にはNullを返すのでWhileを利用して下記のように記述することができます。

PS C:\Work> while ( ($line = $sr.ReadLine()) -ne $null )
>> {
>> $line #ここに読み取った行を処理するコードを記述
>> }
>>

1文字ずつ読み込む

 Readメソッドを使用するとファイルから1文字ずつ読み取ることができます。Readメソッドも1文字読み取った後はストリームの現在位置を次へ進めます。

 次に読み取る文字があるかどうかを確認するには、Peekメソッドを使用します。Peekメソッドは読み取る文字がない場合には-1を返します。

 以上を踏まえ下記にWhileを使用して1文字ずつ読み取る例を示します。

PS C:\Work> while ( $sr.Peek() -gt -1 )
>> {
>> [System.Convert]::ToChar($sr.Read())
>> }

 Readメソッドはキャラクタコードを返すため、[System.Convert]::ToChar()メソッドで変換しています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Windows PowerShell 活用編

もっと読む

著者プロフィール

  • HIRO(ヒロ)

    HIRO's.NETのHIROです。 とある半導体工場のSEです。 VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。 最近はBlog でPowerShellについて書いています。 2008/07/07にPowerShell from Japan!!という...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5