DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

文字列から一行ずつ読み込む

注意:ここで紹介している方法は、テキストファイルから文字列を一行ずつ読み込む方法ではなく、すでにString型となっている文字列から一行ずつ読み込む方法です。テキストファイルから文字列を一行ずつ読み込む方法は、「文字コードを指定してテキストファイルを読み込む」をご覧ください。

文字列(String型)から一行ずつ読み込んで何らかの処理をしたい時、通常は文字列から改行文字の位置をIndexOfで取得し一行切り出す方法や、String.Splitメソッドにより改行文字を区切り文字として配列に分割する方法(こちら)などが考えられます。TextBoxやRichTextBoxのTextプロパティに入っている文字列であれば、Linesプロパティで配列として取得することもできます。

しかしここではあえてStreamReaderやStringReaderクラスのReadLineメソッドを使う方法を考えてみます。ReadLineメソッドは、末尾にラインフィード、あるいはキャリッジリターン+ラインフィードが付いた連続する文字列を一行とします。下の例のようにちょっと面倒なことになりますが、使える場面もあるかもしれません。

VB.NET
コードを隠すコードを選択
'TextBox1に入力されている文字列から一行ずつ読み込む
'文字列(TextBox1に入力された文字列)からStringReaderインスタンスを作成
Dim rs As New System.IO.StringReader(TextBox1.Text)

'StreamReaderを使うと次のようになる
'Dim ms As New System.IO.MemoryStream( _
'    System.Text.Encoding.UTF8.GetBytes(TextBox1.Text))
'Dim rs As New System.IO.StreamReader(ms)

'ストリームの末端まで繰り返す
While rs.Peek() > -1
    '一行読み込んで表示する
    Console.WriteLine(rs.ReadLine())
End While

rs.Close()
C#
コードを隠すコードを選択
//TextBox1に入力されている文字列から一行ずつ読み込む
//文字列(TextBox1に入力された文字列)からStringReaderインスタンスを作成
System.IO.StringReader rs = new System.IO.StringReader(TextBox1.Text);

//StreamReaderを使うと次のようになる
//System.IO.MemoryStream ms = new System.IO.MemoryStream
//    (System.Text.Encoding.UTF8.GetBytes(TextBox1.Text));
//System.IO.StreamReader rs = new System.IO.StreamReader(ms);

//ストリームの末端まで繰り返す
while (rs.Peek() > -1)
{
    //一行読み込んで表示する
    Console.WriteLine(rs.ReadLine());
}

rs.Close();

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。