標準入力からテキストを読み込む (パイプによるテキスト読み込み) - C#

C#でコンソールアプリで標準入力から読み取るコードを紹介します。

概要

標準入力で読み取る場合はConsole.Inを利用します。パイプを使って入力した場合もConsole.Inで入力内容を取得できます。

プログラム例

コード

コンソールアプリケーションを作成し、下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Invert
{
  class Program
  {
    static void Main(string[] args)
    {
      TextReader input;
      input = Console.In;
      Proc(input);
      input.Dispose();
    }

    static void Proc(TextReader tr)
    {
      string line;
      while ((line = tr.ReadLine()) != null) {
        Console.WriteLine(Reverse(line));
      }
    }

    static string Reverse(string s)
    {
      char[] cArray = s.ToCharArray();
      Array.Reverse(cArray);
      return new string(cArray);
    } 
  }
}

解説

Main関数

Main関数の下記の最初の2行でConsole.InのTextReaderを取得します。
  TextReader input;
  input = Console.In;

Proc関数を呼び出します。引数には標準入力のTextReaderオブジェクトを与えます。
  Proc(input);

使用が終わったら、標準入力のTextReaderオブジェクトは最後はDispose()メソッドを呼び出し開放します。
  input.Dispose();

Proc関数

Proc関数では標準入力のTextReaderオブジェクトの ReadLine() メソッドを呼び出し1行ずつ読み込みます。読み込んだ文字列は、Reverse関数に渡され文字の順序を反転します。
  while ((line = tr.ReadLine()) != null) {
    Console.WriteLine(Reverse(line));
  }

Reverse関数

引数に与えられた文字列を char配列に変換し、char配列のReverseメソッドを呼び出して、文字の順序を反転させます。反転した文字が格納されている cArray が枯渇しないことが重要です。
static string Reverse(string s)
{
    char[] cArray = s.ToCharArray();
    Array.Reverse(cArray);
    return new string(cArray);
} 

実行結果

実行ファイルのディレクトリに以下のテキストファイルを用意します。
text.txt
Penguin
Duck
Camel

以下のコマンドを実行します。
type text.txt | Invert.exe

実行結果として以下の文字列が表示されます。
 niugneP
 kcuD
 lemaC

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2010-11-11
iPentec all rights reserverd.