F # - E / S básica

Entrada salida básica incluye:

  • Leer y escribir en la consola.
  • Leer y escribir en un archivo.

Módulo Core.Printf

Hemos utilizado las funciones printf y printfn para escribir en la consola. En esta sección, veremos los detalles delPrintf módulo de F #.

Además de las funciones anteriores, el módulo Core.Printf de F # tiene varios otros métodos para imprimir y formatear usando marcadores% como marcadores de posición. La siguiente tabla muestra los métodos con una breve descripción:

Valor Descripción
bprintf: StringBuilder → BuilderFormat <'T> →' T Imprime en un StringBuilder.
eprintf: TextWriterFormat <'T> →' T Imprime la salida formateada a stderr.
eprintfn: TextWriterFormat <'T> →' T Imprime la salida formateada en stderr, agregando una nueva línea.
failwithf: StringFormat <'T,' Resultado> → 'T Imprime en un búfer de cadena y genera una excepción con el resultado dado.
fprintf: TextWriter → TextWriterFormat <'T> →' T Imprime a un escritor de texto.
fprintfn: TextWriter → TextWriterFormat <'T> →' T Imprime a un escritor de texto, agregando una nueva línea.
kbprintf: (unidad → 'Resultado) → StringBuilder → BuilderFormat <' T, 'Resultado> →' T Como bprintf, pero llama a la función especificada para generar el resultado.
kfprintf: (unidad → 'Resultado) → TextWriter → TextWriterFormat <' T, 'Resultado> →' T Como fprintf, pero llama a la función especificada para generar el resultado.
kprintf: (cadena → 'Resultado) → StringFormat <' T, 'Resultado> →' T Como printf, pero llama a la función especificada para generar el resultado. Por ejemplo, estos permiten que la impresión fuerce una descarga después de que se haya ingresado toda la salida en el canal, pero no antes.
ksprintf: (cadena → 'Resultado) → StringFormat <' T, 'Resultado> →' T Como sprintf, pero llama a la función especificada para generar el resultado.
printf: TextWriterFormat <'T> →' T Imprime la salida formateada en stdout.
printfn: TextWriterFormat <'T> →' T Imprime la salida formateada en stdout, agregando una nueva línea.
sprintf: StringFormat <'T> →' T Imprime en una cadena utilizando un búfer de cadena interno y devuelve el resultado como una cadena.

Especificaciones de formato

Las especificaciones de formato se utilizan para formatear la entrada o la salida, de acuerdo con las necesidades de los programadores.

Se trata de cadenas con marcadores% que indican marcadores de posición de formato.

La sintaxis de los marcadores de posición de formato es:

%[flags][width][.precision][type]

los type se interpreta como -

Tipo Descripción
%segundo Formatea a bool, formateado como true o false.
%C Formatea un personaje.
% s Formatea a string, formateado como su contenido, sin interpretar ningún carácter de escape.
% d,% i Formatea cualquier tipo de entero básico formateado como un entero decimal, firmado si el tipo de entero básico está firmado.
% u Formatea cualquier tipo de entero básico formateado como un entero decimal sin signo.
%X Formatea cualquier tipo de entero básico formateado como un entero hexadecimal sin signo, utilizando letras minúsculas de la a a la f.
%X Formatea cualquier tipo de entero básico formateado como un entero hexadecimal sin signo, utilizando letras mayúsculas de la A a la F.
% o Formatea cualquier tipo de entero básico formateado como un entero octal sin signo.
% e,% E,% f,% F,% g,% G Formatea cualquier tipo de punto flotante básico (float, float32) formateado utilizando especificaciones de formato de punto flotante de estilo C.
% e,% E Formatea un valor con signo que tiene la forma [-] d.dddde [signo] ddd donde d es un solo dígito decimal, dddd es uno o más dígitos decimales, ddd es exactamente tres dígitos decimales y el signo es + o -.
%F Formatea un valor con signo que tiene la forma [-] dddd.dddd, donde dddd es uno o más dígitos decimales. El número de dígitos antes del punto decimal depende de la magnitud del número y el número de dígitos después del punto decimal depende de la precisión solicitada.
% g,% G Formatea un valor firmado impreso en formato foe, el que sea más compacto para el valor y la precisión dados.
%METRO Formatea un valor decimal.
% O Formatea cualquier valor, imprime encajonando el objeto y usando su ToString método.
% A,% + A Formatea cualquier valor, impreso con la configuración de diseño predeterminada. Utilice% + A para imprimir la estructura de sindicatos discriminados con representaciones internas y privadas.
%un

Un especificador de formato general, requiere dos argumentos. El primer argumento es una función que acepta dos argumentos: primero, un parámetro de contexto del tipo apropiado para la función de formato dada (por ejemplo, un TextWriter), y segundo, un valor para imprimir y que genera o devuelve el texto apropiado.

El segundo argumento es el valor particular a imprimir.

% t Un especificador de formato general requiere un argumento: una función que acepta un parámetro de contexto del tipo apropiado para la función de formato dada (aTextWriter) y que genera o devuelve el texto apropiado. Los tipos de enteros básicos sonbyte, sbyte, int16, uint16, int32, uint32, int64, uint64, nativeint, y unativeint. Los tipos básicos de coma flotante son float y float32.

los widthes un parámetro opcional. Es un número entero que indica el ancho mínimo del resultado. Por ejemplo,% 5d imprime un número entero con al menos espacios de 5 caracteres.

Válido flags se describen en la siguiente tabla:

Valor Descripción
0 Especifica agregar ceros en lugar de espacios para completar el ancho requerido.
- Especifica justificar a la izquierda el resultado dentro del ancho especificado.
+ Especifica agregar un carácter + si el número es positivo (para que coincida con un signo - para números negativos).
' ' (espacio) Especifica agregar un espacio adicional si el número es positivo (para que coincida con un signo - para números negativos).
# Inválido.

Ejemplo

printf "Hello "
printf "World"
printfn ""
printfn "Hello "
printfn "World"
printf "Hi, I'm %s and I'm a %s" "Rohit" "Medical Student"

printfn "d: %f" 212.098f
printfn "e: %f" 504.768f

printfn "x: %g" 212.098f
printfn "y: %g" 504.768f

printfn "x: %e" 212.098f
printfn "y: %e" 504.768f
printfn "True: %b" true

Cuando compila y ejecuta el programa, produce el siguiente resultado:

Hello World
Hello
World
Hi, I'm Rohit and I'm a Medical Studentd: 212.098000
e: 504.768000
x: 212.098
y: 504.768
x: 2.120980e+002
y: 5.047680e+002
True: true

La clase de consola

Esta clase es parte del marco .NET. Representa los flujos estándar de entrada, salida y error para aplicaciones de consola.

Proporciona varios métodos para leer y escribir en la consola. La siguiente tabla muestra los métodos:

Método Descripción
Bip() Reproduce el sonido de un pitido a través del altavoz de la consola.
Pitido (Int32, Int32) Reproduce el sonido de un pitido de una frecuencia y duración específicas a través del altavoz de la consola.
Claro Borra el búfer de la consola y la correspondiente ventana de la consola de información de visualización.
MoveBufferArea (Int32, Int32, Int32, Int32, Int32, Int32) Copia un área de origen especificada del búfer de pantalla en un área de destino especificada.
MoveBufferArea (Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor) Copia un área de origen especificada del búfer de pantalla en un área de destino especificada.
OpenStandardError () Adquiere el flujo de errores estándar.
OpenStandardError (Int32) Adquiere el flujo de error estándar, que se establece en un tamaño de búfer especificado.
OpenStandardInput () Adquiere el flujo de entrada estándar.
Entrada estándar abierta (Int32) Adquiere el flujo de entrada estándar, que se establece en un tamaño de búfer especificado.
OpenStandardOutput () Adquiere el flujo de salida estándar.
OpenStandardOutput (Int32) Adquiere el flujo de salida estándar, que se establece en un tamaño de búfer especificado.
Leer Lee el siguiente carácter del flujo de entrada estándar.
Leer la clave() Obtiene el siguiente carácter o tecla de función presionada por el usuario. La tecla presionada se muestra en la ventana de la consola.
ReadKey (booleano) Obtiene el siguiente carácter o tecla de función presionada por el usuario. La tecla presionada se muestra opcionalmente en la ventana de la consola.
ReadLine Lee la siguiente línea de caracteres del flujo de entrada estándar.
ResetColor Establece los colores de la consola de primer plano y de fondo en sus valores predeterminados.
SetBufferSize Establece la altura y el ancho del área de búfer de pantalla en los valores especificados.
SetCursorPosition Establece la posición del cursor.
SetError Establece la propiedad Error en el objeto TextWriter especificado .
Establecer en Establece la propiedad In en el objeto TextReader especificado .
Exponer Establece la propiedad Out en el objeto TextWriter especificado .
SetWindowPosition Establece la posición de la ventana de la consola en relación con el búfer de pantalla.
SetWindowSize Establece la altura y el ancho de la ventana de la consola en los valores especificados.
Escribir (booleano) Escribe la representación de texto del valor booleano especificado en el flujo de salida estándar.
Escribir (Char) Escribe el valor de carácter Unicode especificado en el flujo de salida estándar.
Escribir (Char []) Escribe la matriz especificada de caracteres Unicode en el flujo de salida estándar.
Escribir (decimal) Escribe la representación de texto del valor decimal especificado en el flujo de salida estándar.
Escribir (doble) Escribe la representación de texto del valor de punto flotante de precisión doble especificado en el flujo de salida estándar.
Escritura (Int32) Escribe la representación de texto del valor entero de 32 bits con signo especificado en el flujo de salida estándar.
Escritura (Int64) Escribe la representación de texto del valor entero de 64 bits con signo especificado en el flujo de salida estándar.
Escribir (objeto) Escribe la representación de texto del objeto especificado en el flujo de salida estándar.
Escribir (sencillo) Escribe la representación de texto del valor de punto flotante de precisión simple especificado en el flujo de salida estándar.
Escribir (cadena) Escribe el valor de cadena especificado en el flujo de salida estándar.
Escribir (UInt32) Escribe la representación de texto del valor entero sin signo de 32 bits especificado en el flujo de salida estándar.
Escritura (UInt64) Escribe la representación de texto del valor entero sin signo de 64 bits especificado en el flujo de salida estándar.
Escribir (cadena, objeto) Escribe la representación de texto del objeto especificado en el flujo de salida estándar utilizando la información de formato especificada.
Escribir (cadena, objeto []) Escribe la representación de texto de la matriz de objetos especificada en el flujo de salida estándar utilizando la información de formato especificada.
Escritura (Char [], Int32, Int32) Escribe el subarreglo especificado de caracteres Unicode en el flujo de salida estándar.
Escribir (cadena, objeto, objeto) Escribe la representación de texto de los objetos especificados en el flujo de salida estándar utilizando la información de formato especificada.
Escribir (cadena, objeto, objeto, objeto) Escribe la representación de texto de los objetos especificados en el flujo de salida estándar utilizando la información de formato especificada.
Escribir (cadena, objeto, objeto, objeto, objeto) Escribe la representación de texto de los objetos especificados y la lista de parámetros de longitud variable en el flujo de salida estándar utilizando la información de formato especificada.
Línea de escritura() Escribe el terminador de línea actual en el flujo de salida estándar.
WriteLine (booleano) Escribe la representación de texto del valor booleano especificado, seguido del terminador de línea actual, en el flujo de salida estándar.
WriteLine (Char) Escribe el carácter Unicode especificado, seguido del valor del terminador de línea actual, en el flujo de salida estándar.
WriteLine (Char []) Escribe la matriz especificada de caracteres Unicode, seguida del terminador de línea actual, en el flujo de salida estándar.
WriteLine (decimal) Escribe la representación de texto del valor decimal especificado, seguido del terminador de línea actual, en el flujo de salida estándar.
WriteLine (doble) Escribe la representación de texto del valor de punto flotante de precisión doble especificado, seguido del terminador de línea actual, en el flujo de salida estándar.
WriteLine (Int32) Escribe la representación de texto del valor entero de 32 bits con signo especificado, seguido del terminador de línea actual, en el flujo de salida estándar.
WriteLine (Int64) Escribe la representación de texto del valor entero de 64 bits con signo especificado, seguido del terminador de línea actual, en el flujo de salida estándar.
WriteLine (objeto) Escribe la representación de texto del objeto especificado, seguida del terminador de línea actual, en el flujo de salida estándar.
WriteLine (Single) Escribe la representación de texto del valor de punto flotante de precisión simple especificado, seguido del terminador de línea actual, en el flujo de salida estándar.
WriteLine (cadena) Escribe el valor de cadena especificado, seguido del terminador de línea actual, en el flujo de salida estándar.
WriteLine (UInt32) Escribe la representación de texto del valor entero sin signo de 32 bits especificado, seguido del terminador de línea actual, en el flujo de salida estándar.
WriteLine (UInt64) Escribe la representación de texto del valor entero sin signo de 64 bits especificado, seguido del terminador de línea actual, en el flujo de salida estándar.
WriteLine (cadena, objeto) Escribe la representación de texto del objeto especificado, seguida del terminador de línea actual, en el flujo de salida estándar utilizando la información de formato especificada.
WriteLine (Cadena, Objeto []) Escribe la representación de texto de la matriz de objetos especificada, seguida del terminador de línea actual, en el flujo de salida estándar utilizando la información de formato especificada.
WriteLine (Char [], Int32, Int32) Escribe el subarreglo especificado de caracteres Unicode, seguido del terminador de línea actual, en el flujo de salida estándar.
WriteLine (cadena, objeto, objeto) Escribe la representación de texto de los objetos especificados, seguida del terminador de línea actual, en el flujo de salida estándar utilizando la información de formato especificada.
WriteLine (cadena, objeto, objeto, objeto) Escribe la representación de texto de los objetos especificados, seguida del terminador de línea actual, en el flujo de salida estándar utilizando la información de formato especificada.
WriteLine (cadena, objeto, objeto, objeto, objeto) Escribe la representación de texto de los objetos especificados y la lista de parámetros de longitud variable, seguida del terminador de línea actual, en el flujo de salida estándar utilizando la información de formato especificada.

El siguiente ejemplo demuestra la lectura desde la consola y la escritura en ella:

Ejemplo

open System
let main() =
   Console.Write("What's your name? ")
   let name = Console.ReadLine()
   Console.Write("Hello, {0}\n", name)
   Console.WriteLine(System.String.Format("Big Greetings from {0} and {1}", "TutorialsPoint", "Absoulte Classes"))
   Console.WriteLine(System.String.Format("|{0:yyyy-MMM-dd}|", System.DateTime.Now))
main()

Cuando compila y ejecuta el programa, produce el siguiente resultado:

What's your name? Kabir
Hello, Kabir
Big Greetings from TutorialsPoint and Absoulte Classes
|2015-Jan-05|

El espacio de nombres System.IO

El espacio de nombres System.IO contiene una variedad de clases útiles para realizar E / S básicas.

Contiene tipos o clases que permiten leer y escribir en archivos y flujos de datos y tipos que brindan soporte básico para archivos y directorios.

Clases útiles para trabajar con el sistema de archivos -

  • La clase System.IO.File se utiliza para crear, agregar y eliminar archivos.
  • La clase System.IO.Directory se utiliza para crear, mover y eliminar directorios.
  • La clase System.IO.Path realiza operaciones en cadenas, que representan rutas de archivo.
  • La clase System.IO.FileSystemWatcher permite a los usuarios escuchar cambios en un directorio.

Clases útiles para trabajar con los flujos (secuencia de bytes) -

  • La clase System.IO.StreamReader se usa para leer caracteres de una secuencia.
  • La clase System.IO.StreamWriter se usa para escribir caracteres en una secuencia.
  • La clase System.IO.MemoryStream crea un flujo de bytes en memoria.

La siguiente tabla muestra todas las clases proporcionadas en el espacio de nombres junto con una breve descripción:

Clase Descripción
BinaryReader Lee tipos de datos primitivos como valores binarios en una codificación específica.
Escritor binario Escribe tipos primitivos en binario en una secuencia y admite la escritura de cadenas en una codificación específica.
BufferedStream Agrega una capa de almacenamiento en búfer para leer y escribir operaciones en otro flujo.
Directorio Expone métodos estáticos para crear, mover y enumerar a través de directorios y subdirectorios.
DirectoryInfo Expone métodos de instancia para crear, mover y enumerar a través de directorios y subdirectorios.
DirectoryNotFoundException Excepción que se produce cuando no se puede encontrar parte de un archivo o directorio.
DriveInfo Proporciona acceso a la información de una unidad.
DriveNotFoundException La excepción que se lanza al intentar acceder a una unidad o recurso compartido que no está disponible.
EndOfStreamException La excepción que se lanza cuando se intenta leer más allá del final de una secuencia.
ErrorEventArgs Proporciona datos para el evento FileSystemWatcher.Error.
Archivo Proporciona métodos estáticos para la creación, copia, eliminación, movimiento y apertura de un solo archivo y ayuda en la creación de objetos FileStream.
FileFormatException La excepción que se produce cuando un archivo de entrada o un flujo de datos que se supone que cumple con una determinada especificación de formato de archivo está mal formado.
Información del archivo Proporciona propiedades y métodos de instancia para la creación, copia, eliminación, movimiento y apertura de archivos, y ayuda en la creación de objetos FileStream.
FileLoadException Excepción que se produce cuando se encuentra un ensamblado administrado pero no se puede cargar.
FileNotFoundException La excepción que se lanza cuando falla un intento de acceder a un archivo que no existe en el disco.
FileStream Expone una secuencia alrededor de un archivo, que admite operaciones de lectura y escritura tanto síncronas como asincrónicas.
FileSystemEventArgs Proporciona datos para los eventos del directorio: modificado, creado, eliminado.
FileSystemInfo Proporciona la clase base para los objetos FileInfo y DirectoryInfo.
FileSystemWatcher Escucha las notificaciones de cambio del sistema de archivos y genera eventos cuando cambia un directorio o archivo en un directorio.
InternalBufferOverflowException La excepción lanzada cuando el búfer interno se desborda.
InvalidDataException La excepción que se produce cuando un flujo de datos tiene un formato no válido.
IODescriptionAttribute Establece la descripción que los diseñadores visuales pueden mostrar al hacer referencia a un evento, extensor o propiedad.
IOException La excepción que se lanza cuando ocurre un error de E / S.
MemoryStream Crea una secuencia cuyo almacenamiento de respaldo es la memoria.
Camino Realiza operaciones en instancias de String que contienen información de ruta de directorio o archivo. Estas operaciones se realizan de forma multiplataforma.
PathTooLongException La excepción que se produce cuando una ruta o un nombre de archivo es más largo que la longitud máxima definida por el sistema.
PipeException Se lanza cuando se produce un error dentro de una tubería con nombre.
RenamedEventArgs Proporciona datos para el evento Renombrado.
Corriente Proporciona una vista genérica de una secuencia de bytes. Esto es una clase abstracta.
StreamReader Implementa un TextReader que lee caracteres de un flujo de bytes en una codificación particular.
StreamWriter Implementa un TextWriter para escribir caracteres en una secuencia en una codificación particular. Para examinar el código fuente de .NET Framework para este tipo, consulte la Fuente de referencia.
StringReader Implementa un TextReader que lee de una cadena.
StringWriter Implementa un TextWriter para escribir información en una cadena. La información se almacena en un StringBuilder subyacente.
TextReader Representa un lector que puede leer una serie secuencial de caracteres.
TextWriter Representa un escritor que puede escribir una serie secuencial de caracteres. Esta clase es abstracta.
Accesor de memoria no administrado Proporciona acceso aleatorio a bloques de memoria no administrados desde código administrado.
UnmanagedMemoryStream Proporciona acceso a bloques de memoria no administrados desde código administrado.
WindowsRuntimeStorageExtensions Contiene métodos de extensión para las interfaces IStorageFile e IStorageFolder en Windows Runtime al desarrollar aplicaciones de la Tienda Windows.
WindowsRuntimeStreamExtensions Contiene métodos de extensión para convertir entre transmisiones en Windows Runtime y transmisiones administradas en .NET para aplicaciones de la Tienda Windows.

Ejemplo

El siguiente ejemplo crea un archivo llamado test.txt, escribe un mensaje allí, lee el texto del archivo y lo imprime en la consola.

Note - ¡La cantidad de código necesaria para hacer esto es sorprendentemente menor!

open System.IO // Name spaces can be opened just as modules
File.WriteAllText("test.txt", "Hello There\n Welcome to:\n Tutorials Point")
let msg = File.ReadAllText("test.txt")
printfn "%s" msg

Cuando compila y ejecuta el programa, produce el siguiente resultado:

Hello There
Welcome to:
Tutorials Point