ReadLineメソッドを使うことで標準入力から1行分の文字列を読み込むことができます。 ReadLineメソッドの戻り値には改行文字は含まれないため、末尾の改行文字を取り除くchomp
/chop
のような操作は不要です。
コマンドプロンプトで実行した場合(標準入力がターミナルに接続されている場合)は、ReadLineメソッドはエンターキーが押されるまで待機します。 標準入力がパイプ等に接続されている場合は、その接続先から1行分読み込んだ時点で処理が戻ります。 なお、ReadLineメソッドではCR/LF/CRLFのいずれかを改行として扱います。
またReadLineメソッドは、リダイレクトやパイプで渡される内容が終端(EOF)に達した場合や、コンソールアプリケーションにおいてCTRL+Z(LinuxではCTRL+D)によって入力を中断した場合など、それ以上標準入力から読み込める文字列がない場合にはnull
/Nothing
を返します。
Console.ReadLineメソッドで標準入力から読み込める内容がなくなるまで読み込む
Imports System
Class Sample
Shared Sub Main()
Dim lineNumber As Integer = 0
While True ' 無限ループ
' 標準入力から一行読み込む
Dim line As String = Console.ReadLine()
If line Is Nothing Then
' 読み込める文字列が無くなった
Exit While
Else
' 読み込んだ文字列に行番号を付けて標準出力に書き込む
lineNumber += 1
Console.WriteLine("{0}: {1}", lineNumber, line)
End If
End While
End Sub
End Class
キー入力を使った場合の実行例
>sample.exe
line1
1: line1
line2
2: line2
line3
3: line3
^Z
パイプを使った場合の実行例
>type sample.txt line1 line2 line3 >type sample.txt | sample.exe 1: line1 2: line2ReadメソッドはReadLineメソッドとは異なり 3: line3
コンソールアプリケーションではCTRL+Cを押下することでアプリケーションが中断します。 CTRL+Cが押下されたときの動作を変更したい場合は、Console.CancelKeyPressイベントにイベントハンドラを設定することで動作を定義することができます。
標準入出力との接続については§.標準ストリームのリダイレクトや子プロセスの標準入出力 §.自プロセスと子プロセスの標準ストリームをパイプする、リダイレクト・パイプなどコマンドラインでの操作についてはMS-DOSコマンドプロンプトTips §.パイプとリダイレクトを参照してください。