Console.ReadLine メソッド

定義

標準入力ストリームから次の 1 行分の文字を読み取ります。

public:
 static System::String ^ ReadLine();
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static string? ReadLine ();
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
[System.Runtime.Versioning.UnsupportedOSPlatform("android")]
public static string? ReadLine ();
public static string ReadLine ();
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member ReadLine : unit -> string
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("android")>]
static member ReadLine : unit -> string
static member ReadLine : unit -> string
Public Shared Function ReadLine () As String

戻り値

String

入力ストリームの次の行。または次の行がない場合は null

属性

例外

I/O エラーが発生しました。

返却された文字列にバッファーを割り当てるには、メモリが不足しています。

次の文字行の文字数が MaxValue を超えています。

次の例では、2 つのコマンド ライン引数が必要です。既存のテキスト ファイルの名前と、出力を書き込むファイルの名前です。 既存のテキスト ファイルが開き、キーボードからそのファイルに標準入力がリダイレクトされます。 また、標準出力をコンソールから出力ファイルにリダイレクトします。 次に、 メソッドを使用してファイル内の各行を読み取り、4 つのスペースのすべてのシーケンスをタブ文字に置き換え、 メソッドを使用して結果を出力ファイルに Console.ReadLine Console.WriteLine 書き込みします。

using namespace System;
using namespace System::IO;

int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const int tabSize = 4;
   String^ usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
   StreamWriter^ writer = nullptr;
   if ( args->Length < 3 )
   {
      Console::WriteLine( usageText );
      return 1;
   }

   try
   {
      // Attempt to open output file.
      writer = gcnew StreamWriter( args[ 2 ] );
      // Redirect standard output from the console to the output file.
      Console::SetOut( writer );
      // Redirect standard input from the console to the input file.
      Console::SetIn( gcnew StreamReader( args[ 1 ] ) );
   }
   catch ( IOException^ e ) 
   {
      TextWriter^ errorWriter = Console::Error;
      errorWriter->WriteLine( e->Message );
      errorWriter->WriteLine( usageText );
      return 1;
   }

   String^ line;
   while ( (line = Console::ReadLine()) != nullptr )
   {
      String^ newLine = line->Replace( ((String^)"")->PadRight( tabSize, ' ' ), "\t" );
      Console::WriteLine( newLine );
   }

   writer->Close();
   
   // Recover the standard output stream so that a 
   // completion message can be displayed.
   StreamWriter^ standardOutput = gcnew StreamWriter( Console::OpenStandardOutput() );
   standardOutput->AutoFlush = true;
   Console::SetOut( standardOutput );
   Console::WriteLine( "INSERTTABS has completed the processing of {0}.", args[ 1 ] );
   return 0;
}
using System;
using System.IO;

public class InsertTabs
{
    private const int tabSize = 4;
    private const string usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
    public static int Main(string[] args)
    {
        if (args.Length < 2)
        {
            Console.WriteLine(usageText);
            return 1;
        }

        try
        {
            // Attempt to open output file.
            using (var writer = new StreamWriter(args[1]))
            {
                using (var reader = new StreamReader(args[0]))
                {
                    // Redirect standard output from the console to the output file.
                    Console.SetOut(writer);
                    // Redirect standard input from the console to the input file.
                    Console.SetIn(reader);
                    string line;
                    while ((line = Console.ReadLine()) != null)
                    {
                        string newLine = line.Replace(("").PadRight(tabSize, ' '), "\t");
                        Console.WriteLine(newLine);
                    }
                }
            }
        }
        catch(IOException e)
        {
            TextWriter errorWriter = Console.Error;
            errorWriter.WriteLine(e.Message);
            errorWriter.WriteLine(usageText);
            return 1;
        }

        // Recover the standard output stream so that a
        // completion message can be displayed.
        var standardOutput = new StreamWriter(Console.OpenStandardOutput());
        standardOutput.AutoFlush = true;
        Console.SetOut(standardOutput);
        Console.WriteLine($"INSERTTABS has completed the processing of {args[0]}.");
        return 0;
    }
}
Imports System.IO

Public Module InsertTabs
    Private Const tabSize As Integer = 4
    Private Const usageText As String = "Usage: INSERTTABS inputfile.txt outputfile.txt"
   
    Public Function Main(args As String()) As Integer
        If args.Length < 2 Then
            Console.WriteLine(usageText)
            Return 1
        End If
      
        Try
            ' Attempt to open output file.
            Using writer As New StreamWriter(args(1))
                Using reader As New StreamReader(args(0))
                    ' Redirect standard output from the console to the output file.
                    Console.SetOut(writer)
                    ' Redirect standard input from the console to the input file.
                    Console.SetIn(reader)
                    Dim line As String = Console.ReadLine()
                    While line IsNot Nothing
                        Dim newLine As String = line.Replace("".PadRight(tabSize, " "c), ControlChars.Tab)
                        Console.WriteLine(newLine)
                        line = Console.ReadLine()
                    End While
                End Using
            End Using
        Catch e As IOException
            Dim errorWriter As TextWriter = Console.Error
            errorWriter.WriteLine(e.Message)
            errorWriter.WriteLine(usageText)
            Return 1
        End Try

        ' Recover the standard output stream so that a 
        ' completion message can be displayed.
        Dim standardOutput As New StreamWriter(Console.OpenStandardOutput())
        standardOutput.AutoFlush = True
        Console.SetOut(standardOutput)
        Console.WriteLine($"INSERTTABS has completed the processing of {args(0)}.")
        Return 0
    End Function 
End Module

注釈

メソッド ReadLine は、標準入力ストリームから行を読み取ります。 (行の定義については、次の一覧の後の段落を参照してください)。これは、次の意味を意味します。

  • 標準入力デバイスがキーボードの場合、ユーザーが Enter キーを押すまでメソッド ReadLineブロック されます。

    メソッドの最も一般的な用途の 1 つは、コンソールをクリアして新しい情報を表示する前にプログラムの実行を一時停止するか、アプリケーションを終了する前に Enter キーを押すプロンプトをユーザーに表示する方法です ReadLine 。 次の例を使って説明します。

    using namespace System;
    
    void main()
    {
        Console::Clear();
    
        DateTime dat = DateTime::Now;
    
        Console::WriteLine("\nToday is {0:d} at {0:T}.", dat);
        Console::Write("\nPress any key to continue... ");
        Console::ReadLine();
    }
    // The example displays output like the following:
    //     Today is 10/26/2015 at 12:22:22 PM.
    //     
    //     Press any key to continue...
    
    using System;
    
    public class Example
    {
       public static void Main()
       {
          Console.Clear();
    
          DateTime dat = DateTime.Now;
    
          Console.WriteLine("\nToday is {0:d} at {0:T}.", dat);
          Console.Write("\nPress any key to continue... ");
          Console.ReadLine();
       }
    }
    // The example displays output like the following:
    //     Today is 10/26/2015 at 12:22:22 PM.
    //
    //     Press any key to continue...
    
    Module Example
       Public Sub Main()
          Console.Clear()
    
          Dim dat As Date = Date.Now
    
          Console.WriteLine()
          Console.WriteLine("Today is {0:d} at {0:T}.", dat)
          Console.WriteLine()
          Console.Write("Press any key to continue... ")
          Console.ReadLine()
       End Sub
    End Module
    ' The example displays output like the following:
    '     Today is 10/26/2015 at 12:22:22 PM.
    '     
    '     Press any key to continue...
    
  • 標準入力がファイルにリダイレクトされる場合、メソッドはファイル ReadLine からテキスト行を読み取ります。 たとえば、 という名前のテキスト ファイルを次に示ReadLine1.txt。

    
    This is the first line.
    This is the second line.
    This is the third line.
    This is the fourth line.
    
    

    次の例では、 ReadLine メソッドを使用して、ファイルからリダイレクトされる入力を読み取します。 読み取り操作は、 メソッドが を返した場合に終了します。これは、読み取り行 null が残り残りがない状態を示します。

    using System;
    
    public class Example
    {
       public static void Main()
       {
          if (! Console.IsInputRedirected) {
             Console.WriteLine("This example requires that input be redirected from a file.");
             return;
          }
    
          Console.WriteLine("About to call Console.ReadLine in a loop.");
          Console.WriteLine("----");
          String s;
          int ctr = 0;
          do {
             ctr++;
             s = Console.ReadLine();
             Console.WriteLine("Line {0}: {1}", ctr, s);
          } while (s != null);
          Console.WriteLine("---");
       }
    }
    // The example displays the following output:
    //       About to call Console.ReadLine in a loop.
    //       ----
    //       Line 1: This is the first line.
    //       Line 2: This is the second line.
    //       Line 3: This is the third line.
    //       Line 4: This is the fourth line.
    //       Line 5:
    //       ---
    
    Module Example
       Public Sub Main()
          If Not Console.IsInputRedirected Then
             Console.WriteLine("This example requires that input be redirected from a file.")
             Exit Sub 
          End If
    
          Console.WriteLine("About to call Console.ReadLine in a loop.")
          Console.WriteLine("----")
          Dim s As String
          Dim ctr As Integer
          Do
             ctr += 1
             s = Console.ReadLine()
             Console.WriteLine("Line {0}: {1}", ctr, s)
          Loop While s IsNot Nothing
          Console.WriteLine("---")
       End Sub
    End Module
    ' The example displays the following output:
    '       About to call Console.ReadLine in a loop.
    '       ----
    '       Line 1: This is the first line.
    '       Line 2: This is the second line.
    '       Line 3: This is the third line.
    '       Line 4: This is the fourth line.
    '       Line 5:
    '       ---
    

    この例を ReadLine1.exe という名前の実行可能ファイルにコンパイルした後、コマンド ラインから 構文を使用して実行できます。

    ReadLine1 < ReadLine1.txt
    

    ファイルの内容を読み取り、コンソールに表示する場合は 。

行は、文字のシーケンスの後にキャリッジ リターン (16 進数 0x000d)、改行 (16 進数 0x000a)、または プロパティの値として定義 Environment.NewLine されます。 返される文字列には、終端文字が含まれます。 既定では、 メソッドは 256 文字の入力バッファーから入力を読み取ります。 これには 文字が含まれるため、メソッドは最大 Environment.NewLine 254 文字の行を読み取る可能性があります。 長い行を読み取る場合は、 メソッドを呼び OpenStandardInput(Int32) 出します。

メソッド ReadLine は同期的に実行されます。 つまり、行が読み取されるか、Ctrl + Z キーボードの組み合わせが押されるまでブロックされます。 プロパティは、標準入力ストリームを表し、同期メソッドと非同期メソッドの両方を持つ In TextReader TextReader.ReadLine オブジェクトを返 TextReader.ReadLineAsync します。 ただし、コンソールの標準入力ストリームとして使用すると、 は非同期ではなく同期的に実行され、読み取り操作が完了した後でのみ を TextReader.ReadLineAsync Task<String> 返します。

このメソッドが例外をスローした場合、基になるオブジェクト内のリーダーの位置は、メソッドが読み取り可能だった文字数によって進みますが、内部バッファーに既に読み込まれる文字は OutOfMemoryException Stream ReadLine 破棄されます。 ストリーム内のリーダーの位置を変更できないので、既に読み取った文字は回復不可能であり、 を再初期化することでのみアクセスできます TextReader 。 ストリーム内の最初の位置が不明な場合、またはストリームがシークをサポートしていない場合は、基になるものも再初期化 Stream する必要があります。 このような状況を回避し、堅牢なコードを生成するには、 プロパティと メソッドを使用し、事前に割り当てられたバッファーに読み取り文字 KeyAvailable ReadKey を格納する必要があります。

メソッドがコンソールから入力を読み取る際に Ctrl + Z 文字が押された場合、メソッドは を返します null 。 これにより、ユーザーは、 メソッドがループで呼び出された場合に、それ ReadLine 以上キーボード入力を防ぐのに使用できます。 このシナリオを次の例で説明します。

using namespace System;

void main()
{
   String^ line;
   Console::WriteLine("Enter one or more lines of text (press CTRL+Z to exit):");
   Console::WriteLine();
   do { 
      Console::Write("   ");
      line = Console::ReadLine();
      if (line != nullptr) 
         Console::WriteLine("      " + line);
   } while (line != nullptr);   
}
// The following displays possible output from this example:
//       Enter one or more lines of text (press CTRL+Z to exit):
//       
//          This is line #1.
//             This is line #1.
//          This is line #2
//             This is line #2
//          ^Z
//       
//       >}
using System;

public class Example
{
   public static void Main()
   {
      string line;
      Console.WriteLine("Enter one or more lines of text (press CTRL+Z to exit):");
      Console.WriteLine();
      do {
         Console.Write("   ");
         line = Console.ReadLine();
         if (line != null)
            Console.WriteLine("      " + line);
      } while (line != null);
   }
}
// The following displays possible output from this example:
//       Enter one or more lines of text (press CTRL+Z to exit):
//
//          This is line #1.
//             This is line #1.
//          This is line #2
//             This is line #2
//          ^Z
//
//       >
Module Example
   Public Sub Main()
      Dim line As String
      Console.WriteLine("Enter one or more lines of text (press CTRL+Z to exit):")
      Console.WriteLine()
      Do 
         Console.Write("   ")
         line = Console.ReadLine()
         If line IsNot Nothing Then Console.WriteLine("      " + line)
      Loop While line IsNot Nothing   
   End Sub
End Module
' The following displays possible output from this example:
'       Enter one or more lines of text (press CTRL+Z to exit):
'       
'          This is line #1.
'             This is line #1.
'          This is line #2
'             This is line #2
'          ^Z
'       
'       >

適用対象

こちらもご覧ください