Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Console.ReadLine ()

 

Publicado: octubre de 2016

Lee la siguiente línea de caracteres del flujo de entrada estándar.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static string ReadLine()

Valor devuelto

Type: System.String

La siguiente línea de caracteres del flujo de entrada o null si no hay más líneas disponibles.

Exception Condition
IOException

Error de E/S.

OutOfMemoryException

No hay memoria suficiente para asignar un búfer para la cadena devuelta.

ArgumentOutOfRangeException

El número de caracteres de la siguiente línea de caracteres es mayor que Int32.MaxValue.

El ReadLine método lee una línea del flujo de entrada estándar. (Para la definición de una línea, consulte el párrafo después de la lista siguiente). Esto significa que:

  • Si el dispositivo de entrada estándar es el teclado, el ReadLine método se bloquea hasta que el usuario presiona el ENTRAR clave.

    Uno de los más comunes usos de la ReadLine método es para pausar la ejecución del programa antes de borrar la consola y mostrar información nueva o para solicitar al usuario que presione la tecla ENTRAR antes de terminar la aplicación. Esto se ilustra en el siguiente ejemplo:

    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...
    
    
  • Si la entrada estándar se redirige a un archivo, el ReadLine método lee una línea de texto de un archivo. Por ejemplo, el siguiente es un archivo de texto denominado ReadLine1.txt:

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

    En el ejemplo siguiente se usa el ReadLine método para leer la entrada que se ha redirigido desde un archivo. La operación de lectura finaliza cuando el método devuelve null, lo que indica que no hay líneas permanecen para poder leerse.

    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:
    //       ---
    

    Después de compilar el ejemplo para un ejecutable ReadLine1.exe con nombre, puede ejecutarlo desde la línea de comandos con la sintaxis

    ReadLine1 < ReadLine1.txt
    

    para leer el contenido del archivo y mostrarlos en la consola.

Una línea se define como una secuencia de caracteres seguida por un retorno de carro (hexadecimal 0x000d), un avance de línea (hexadecimal 0x000a) o el valor de la Environment.NewLine propiedad. La cadena devuelta no contiene los caracteres de terminación. De forma predeterminada, el método lee la entrada de un búfer de entrada de 256 caracteres. Dado que esto incluye la Environment.NewLine caracteres, el método puede leer las líneas que contengan hasta 254 caracteres. Para obtener más líneas más largas, llame a la OpenStandardInput(Int32) método.

El ReadLine método se ejecuta sincrónicamente. Es decir, se bloquea hasta que se lee una línea o se presiona la combinación de teclas CTRL+z. El In propiedad devuelve un TextReader objeto que representa el flujo de entrada estándar y que tiene tanto un sincrónico TextReader.ReadLine método y una asincrónica TextReader.ReadLineAsync método. Sin embargo, cuando se usa como flujo de entrada estándar de la consola, el TextReader.ReadLineAsync ejecuta sincrónicamente en lugar de forma asincrónica y devuelve un Task<String> solo una vez completada la operación de lectura.

Si este método produce una OutOfMemoryException excepción, la posición del lector en subyacente Stream objeto avanza por el número de caracteres que el método es capaz de leer, pero los caracteres ya leídos en interno ReadLine búfer se descartan. Puesto que no se puede cambiar la posición del lector en la secuencia, los caracteres ya leídos son irrecuperables y son accesibles solo reinicializando la TextReader. Si se conoce la posición inicial dentro de la secuencia o la secuencia no admite búsquedas, subyacente Stream también es necesario reinicializar. Para evitar esta situación y generar código robusto, debe utilizar el KeyAvailable propiedad y ReadKey método y el almacén de los caracteres de lectura en un búfer preasignado.

Si se presiona el carácter CTRL+z cuando el método es leer la entrada de la consola, el método devuelve null. Esto permite que el usuario para evitar más teclado entrada cuando el ReadLine método se llama en un bucle. En el ejemplo siguiente se muestra este escenario.

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
//       
//       >

El ejemplo siguiente requiere dos argumentos de línea de comandos: el nombre de un archivo de texto existente y el nombre de un archivo para escribir la salida. Se abre el archivo de texto existente y redirige la entrada estándar del teclado a ese archivo. También se redirige la salida estándar de la consola en el archivo de salida. A continuación, utiliza el Console.ReadLine método para leer cada línea en el archivo, reemplaza cada secuencia de cuatro espacios por un carácter de tabulación y utiliza el Console.WriteLine método para escribir el resultado en el archivo de salida.

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) {
        StreamWriter writer = null;

        if (args.Length < 2) {
            Console.WriteLine(usageText);
            return 1;
        }

        try {
            // Attempt to open output file.
            writer = new StreamWriter(args[1]);
            // 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(new StreamReader(args[0]));
        }
        catch(IOException e) {
            TextWriter errorWriter = Console.Error;
            errorWriter.WriteLine(e.Message);
            errorWriter.WriteLine(usageText);
            return 1;            
        }
        string line;
        while ((line = Console.ReadLine()) != null) {
            string newLine = line.Replace(("").PadRight(tabSize, ' '), "\t");
            Console.WriteLine(newLine);
        }
        writer.Close();
        // Recover the standard output stream so that a 
        // completion message can be displayed.
        StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
        standardOutput.AutoFlush = true;
        Console.SetOut(standardOutput);
        Console.WriteLine("INSERTTABS has completed the processing of {0}.", args[0]);
        return 0;
    }
}

.NET Framework
Disponible desde 1.1
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Volver al principio
Mostrar: