SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windows PowerShell 活用編

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

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

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

 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()メソッドで変換しています。

次のページ
ファイルの書き込み

この記事は参考になりましたか?

Windows PowerShell 活用編連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3592 2009/03/09 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー