F # - I / O di base

L'uscita di ingresso di base include:

  • Leggere e scrivere nella console.
  • Leggere e scrivere su file.

Modulo Core.Printf

Abbiamo usato le funzioni printf e printfn per scrivere nella console. In questa sezione, esamineremo i dettagli diPrintf modulo di F #.

Oltre alle funzioni precedenti, il modulo Core.Printf di F # dispone di vari altri metodi per la stampa e la formattazione utilizzando% marker come segnaposto. La tabella seguente mostra i metodi con una breve descrizione:

Valore Descrizione
bprintf: StringBuilder → BuilderFormat <'T> →' T Stampa su un StringBuilder.
eprintf: TextWriterFormat <'T> →' T Stampa l'output formattato su stderr.
eprintfn: TextWriterFormat <'T> →' T Stampa l'output formattato su stderr, aggiungendo una nuova riga.
failwithf: StringFormat <'T,' Result> → 'T Stampa su un buffer di stringa e solleva un'eccezione con il risultato dato.
fprintf: TextWriter → TextWriterFormat <'T> →' T Stampa su uno scrittore di testo.
fprintfn: TextWriter → TextWriterFormat <'T> →' T Stampa su uno scrittore di testo, aggiungendo una nuova riga.
kbprintf: (unità → 'Risultato) → StringBuilder → BuilderFormat <' T, 'Risultato> →' T Come bprintf, ma chiama la funzione specificata per generare il risultato.
kfprintf: (unità → 'Risultato) → TextWriter → TextWriterFormat <' T, 'Risultato> →' T Come fprintf, ma chiama la funzione specificata per generare il risultato.
kprintf: (stringa → 'Risultato) → StringFormat <' T, 'Risultato> →' T Come printf, ma chiama la funzione specificata per generare il risultato. Ad esempio, questi consentono alla stampa di forzare un flush dopo che tutto l'output è stato immesso nel canale, ma non prima.
ksprintf: (stringa → 'Risultato) → StringFormat <' T, 'Risultato> →' T Come sprintf, ma chiama la funzione specificata per generare il risultato.
printf: TextWriterFormat <'T> →' T Stampa l'output formattato su stdout.
printfn: TextWriterFormat <'T> →' T Stampa l'output formattato su stdout, aggiungendo una nuova riga.
sprintf: StringFormat <'T> →' T Stampa su una stringa utilizzando un buffer di stringa interno e restituisce il risultato come stringa.

Specifiche di formato

Le specifiche di formato vengono utilizzate per formattare l'input o l'output, in base alle necessità dei programmatori.

Si tratta di stringhe con marcatori% che indicano segnaposto di formato.

La sintassi dei segnaposto di formato è:

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

Il type è interpretato come -

genere Descrizione
% b Formati a bool, formattato come true o false.
% c Formatta un carattere.
%S Formati a string, formattato come contenuto, senza interpretare alcun carattere di escape.
% d,% i Formatta qualsiasi tipo intero di base formattato come intero decimale, con segno se il tipo intero di base è firmato.
% u Formatta qualsiasi tipo intero di base formattato come numero intero decimale senza segno.
%X Formatta qualsiasi tipo intero di base formattato come numero intero esadecimale senza segno, utilizzando lettere minuscole dalla a alla f.
%X Formatta qualsiasi tipo intero di base formattato come intero esadecimale senza segno, utilizzando le lettere maiuscole dalla A alla F.
% o Formatta qualsiasi tipo intero di base formattato come numero intero ottale senza segno.
% e,% E,% f,% F,% g,% G Formatta qualsiasi tipo di virgola mobile di base (float, float32) formattato utilizzando specifiche di formato a virgola mobile in stile C.
% e,% E Formatta un valore con segno avente la forma [-] d.dddde [segno] ddd dove d è una singola cifra decimale, dddd è una o più cifre decimali, ddd è esattamente tre cifre decimali e il segno è + o -.
% f Formatta un valore con segno avente la forma [-] dddd.dddd, dove dddd è una o più cifre decimali. Il numero di cifre prima della virgola decimale dipende dalla grandezza del numero e il numero di cifre dopo la virgola decimale dipende dalla precisione richiesta.
% g,% G Formatta un valore con segno stampato in formato f o e, a seconda di quale sia più compatto per il valore e la precisione dati.
% M Formatta un valore Decimal.
% O Formatta qualsiasi valore, stampato inscatolando l'oggetto e usando il suo ToString metodo.
% A,% + A Formatta qualsiasi valore, stampato con le impostazioni di layout predefinite. Usa% + A per stampare la struttura dei sindacati discriminati con rappresentazioni interne e private.
%un

Un identificatore di formato generale richiede due argomenti. Il primo argomento è una funzione che accetta due argomenti: primo, un parametro di contesto del tipo appropriato per la funzione di formattazione data (ad esempio, un TextWriter) e secondo, un valore da stampare e che restituisce o restituisce il testo appropriato.

Il secondo argomento è il valore particolare da stampare.

% t Un identificatore di formato generale richiede un argomento: una funzione che accetta un parametro di contesto del tipo appropriato per la funzione di formattazione data (aTextWriter) e che restituisce o restituisce il testo appropriato. I tipi interi di base sonobyte, sbyte, int16, uint16, int32, uint32, int64, uint64, nativeint, e unativeint. I tipi di virgola mobile di base sono float e float32.

Il widthè un parametro facoltativo. È un numero intero che indica la larghezza minima del risultato. Ad esempio,% 5d stampa un numero intero con almeno spazi di 5 caratteri.

Valido flags sono descritti nella tabella seguente -

Valore Descrizione
0 Specifica di aggiungere zeri invece di spazi per ottenere la larghezza richiesta.
- Specifica di giustificare a sinistra il risultato entro la larghezza specificata.
+ Specifica di aggiungere un carattere + se il numero è positivo (per far corrispondere un segno - per i numeri negativi).
' ' (spazio) Specifica di aggiungere uno spazio extra se il numero è positivo (per far corrispondere un segno - per i numeri negativi).
# Non valido.

Esempio

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

Quando compili ed esegui il programma, restituisce il seguente output:

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 classe della console

Questa classe fa parte del framework .NET. Rappresenta i flussi di input, output e errore standard per le applicazioni della console.

Fornisce vari metodi per leggere e scrivere nella console. La tabella seguente mostra i metodi:

Metodo Descrizione
Beep () Riproduce il suono di un segnale acustico attraverso l'altoparlante della console.
Beep (Int32, Int32) Riproduce il suono di un segnale acustico di una frequenza e una durata specificate attraverso l'altoparlante della console.
Chiaro Cancella il buffer della console e la finestra della console corrispondente delle informazioni di visualizzazione.
MoveBufferArea (Int32, Int32, Int32, Int32, Int32, Int32) Copia un'area di origine specificata del buffer dello schermo in un'area di destinazione specificata.
MoveBufferArea (Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor) Copia un'area di origine specificata del buffer dello schermo in un'area di destinazione specificata.
OpenStandardError () Acquisisce il flusso di errore standard.
OpenStandardError (Int32) Acquisisce il flusso di errore standard, che è impostato su una dimensione del buffer specificata.
OpenStandardInput () Acquisisce il flusso di input standard.
OpenStandardInput (Int32) Acquisisce il flusso di input standard, che è impostato su una dimensione del buffer specificata.
OpenStandardOutput () Acquisisce il flusso di output standard.
OpenStandardOutput (Int32) Acquisisce il flusso di output standard, che è impostato su una dimensione del buffer specificata.
Leggere Legge il carattere successivo dal flusso di input standard.
ReadKey () Ottiene il carattere o il tasto funzione successivo premuto dall'utente. Il tasto premuto viene visualizzato nella finestra della console.
ReadKey (booleano) Ottiene il carattere o il tasto funzione successivo premuto dall'utente. Il tasto premuto viene visualizzato facoltativamente nella finestra della console.
Linea di lettura Legge la riga di caratteri successiva dal flusso di input standard.
ResetColor Imposta i colori di primo piano e di sfondo della console sui valori predefiniti.
SetBufferSize Imposta l'altezza e la larghezza dell'area del buffer dello schermo sui valori specificati.
SetCursorPosition Imposta la posizione del cursore.
SetError Imposta la proprietà Error sull'oggetto TextWriter specificato .
SetIn Imposta la proprietà In sull'oggetto TextReader specificato .
SetOut Imposta la proprietà Out sull'oggetto TextWriter specificato .
SetWindowPosition Imposta la posizione della finestra della console rispetto al buffer dello schermo.
SetWindowSize Imposta l'altezza e la larghezza della finestra della console sui valori specificati.
Scrivi (booleano) Scrive la rappresentazione testuale del valore booleano specificato nel flusso di output standard.
Scrivi (carattere) Scrive il valore del carattere Unicode specificato nel flusso di output standard.
Scrivi (Char []) Scrive la matrice specificata di caratteri Unicode nel flusso di output standard.
Scrivi (decimale) Scrive la rappresentazione testuale del valore Decimal specificato nel flusso di output standard.
Scrivi (doppia) Scrive la rappresentazione testuale del valore a virgola mobile e precisione doppia specificato nel flusso di output standard.
Scrivi (Int32) Scrive la rappresentazione testuale del valore intero con segno a 32 bit specificato nel flusso di output standard.
Scrivi (Int64) Scrive la rappresentazione testuale del valore intero con segno a 64 bit specificato nel flusso di output standard.
Scrivi (oggetto) Scrive la rappresentazione testuale dell'oggetto specificato nel flusso di output standard.
Scrivi (singolo) Scrive la rappresentazione testuale del valore a virgola mobile a precisione singola specificato nel flusso di output standard.
Scrivi (stringa) Scrive il valore di stringa specificato nel flusso di output standard.
Scrivi (UInt32) Scrive la rappresentazione testuale del valore intero senza segno a 32 bit specificato nel flusso di output standard.
Scrivi (UInt64) Scrive la rappresentazione testuale del valore intero senza segno a 64 bit specificato nel flusso di output standard.
Scrivi (stringa, oggetto) Scrive la rappresentazione testuale dell'oggetto specificato nel flusso di output standard utilizzando le informazioni sul formato specificate.
Scrivi (String, Object []) Scrive la rappresentazione testuale della matrice di oggetti specificata nel flusso di output standard utilizzando le informazioni sul formato specificate.
Scrivi (Char [], Int32, Int32) Scrive il sottoarray specificato di caratteri Unicode nel flusso di output standard.
Scrivi (stringa, oggetto, oggetto) Scrive la rappresentazione testuale degli oggetti specificati nel flusso di output standard utilizzando le informazioni sul formato specificate.
Scrivi (stringa, oggetto, oggetto, oggetto) Scrive la rappresentazione testuale degli oggetti specificati nel flusso di output standard utilizzando le informazioni sul formato specificate.
Scrivi (stringa, oggetto, oggetto, oggetto, oggetto) Scrive la rappresentazione testuale degli oggetti specificati e l'elenco di parametri di lunghezza variabile nel flusso di output standard utilizzando le informazioni sul formato specificato.
Linea di scrittura() Scrive il terminatore di riga corrente nel flusso di output standard.
WriteLine (Boolean) Scrive la rappresentazione testuale del valore booleano specificato, seguita dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (Char) Scrive il carattere Unicode specificato, seguito dal terminatore di riga corrente, valore nel flusso di output standard.
WriteLine (Char []) Scrive la matrice specificata di caratteri Unicode, seguita dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (decimale) Scrive la rappresentazione testuale del valore Decimal specificato, seguita dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (Double) Scrive la rappresentazione testuale del valore a virgola mobile e precisione doppia specificato, seguita dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (Int32) Scrive la rappresentazione testuale del valore intero con segno a 32 bit specificato, seguita dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (Int64) Scrive la rappresentazione testuale del valore intero con segno a 64 bit specificato, seguita dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (oggetto) Scrive la rappresentazione testuale dell'oggetto specificato, seguita dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (Single) Scrive la rappresentazione testuale del valore a virgola mobile a precisione singola specificato, seguita dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (stringa) Scrive il valore di stringa specificato, seguito dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (UInt32) Scrive la rappresentazione testuale del valore intero senza segno a 32 bit specificato, seguito dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (UInt64) Scrive la rappresentazione testuale del valore intero senza segno a 64 bit specificato, seguito dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (String, Object) Scrive la rappresentazione testuale dell'oggetto specificato, seguita dal terminatore di riga corrente, nel flusso di output standard utilizzando le informazioni sul formato specificato.
WriteLine (String, Object []) Scrive la rappresentazione testuale della matrice di oggetti specificata, seguita dal terminatore di riga corrente, nel flusso di output standard utilizzando le informazioni sul formato specificato.
WriteLine (Char [], Int32, Int32) Scrive la sottostruttura specificata di caratteri Unicode, seguita dal terminatore di riga corrente, nel flusso di output standard.
WriteLine (String, Object, Object) Scrive la rappresentazione testuale degli oggetti specificati, seguita dal terminatore di riga corrente, nel flusso di output standard utilizzando le informazioni sul formato specificato.
WriteLine (String, Object, Object, Object) Scrive la rappresentazione testuale degli oggetti specificati, seguita dal terminatore di riga corrente, nel flusso di output standard utilizzando le informazioni sul formato specificato.
WriteLine (String, Object, Object, Object, Object) Scrive la rappresentazione testuale degli oggetti specificati e l'elenco dei parametri di lunghezza variabile, seguita dal terminatore di riga corrente, nel flusso di output standard utilizzando le informazioni sul formato specificato.

L'esempio seguente mostra la lettura dalla console e la scrittura in essa:

Esempio

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()

Quando compili ed esegui il programma, restituisce il seguente output:

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

Lo spazio dei nomi System.IO

Lo spazio dei nomi System.IO contiene una varietà di classi utili per eseguire operazioni di I / O di base.

Contiene tipi o classi che consentono la lettura e la scrittura su file e flussi di dati e tipi che forniscono supporto di base per file e directory.

Classi utili per lavorare con il file system -

  • La classe System.IO.File viene utilizzata per creare, aggiungere ed eliminare file.
  • La classe System.IO.Directory viene utilizzata per creare, spostare ed eliminare le directory.
  • La classe System.IO.Path esegue operazioni sulle stringhe, che rappresentano i percorsi dei file.
  • La classe System.IO.FileSystemWatcher consente agli utenti di ascoltare le modifiche in una directory.

Classi utili per lavorare con i flussi (sequenza di byte) -

  • La classe System.IO.StreamReader viene utilizzata per leggere i caratteri da un flusso.
  • La classe System.IO.StreamWriter viene utilizzata per scrivere caratteri in un flusso.
  • La classe System.IO.MemoryStream crea un flusso di byte in memoria.

La tabella seguente mostra tutte le classi fornite nello spazio dei nomi insieme a una breve descrizione:

Classe Descrizione
BinaryReader Legge i tipi di dati primitivi come valori binari in una codifica specifica.
BinaryWriter Scrive tipi primitivi in ​​binario in un flusso e supporta la scrittura di stringhe in una codifica specifica.
BufferedStream Aggiunge un livello di buffering per leggere e scrivere operazioni su un altro flusso.
Directory Espone metodi statici per creare, spostare ed enumerare directory e sottodirectory.
DirectoryInfo Espone i metodi di istanza per la creazione, lo spostamento e l'enumerazione di directory e sottodirectory.
DirectoryNotFoundException Eccezione generata quando non è possibile trovare una parte di un file o di una directory.
DriveInfo Fornisce accesso alle informazioni su un'unità.
DriveNotFoundException Eccezione generata quando si tenta di accedere a un'unità o una condivisione non disponibile.
EndOfStreamException Eccezione generata quando si tenta di leggere oltre la fine di un flusso.
ErrorEventArgs Fornisce dati per l'evento FileSystemWatcher.Error.
File Fornisce metodi statici per la creazione, la copia, l'eliminazione, lo spostamento e l'apertura di un singolo file e aiuta nella creazione di oggetti FileStream.
FileFormatException L'eccezione generata quando un file di input o un flusso di dati che dovrebbe essere conforme a una determinata specifica di formato di file non è corretto.
FileInfo Fornisce proprietà e metodi di istanza per la creazione, la copia, l'eliminazione, lo spostamento e l'apertura di file e aiuta nella creazione di oggetti FileStream.
FileLoadException Eccezione generata quando viene trovato un assembly gestito ma non può essere caricato.
FileNotFoundException Eccezione generata quando un tentativo di accedere a un file che non esiste su disco fallisce.
FileStream Espone un flusso attorno a un file, supportando operazioni di lettura e scrittura sia sincrone che asincrone.
FileSystemEventArgs Fornisce dati per gli eventi della directory: modificati, creati, eliminati.
FileSystemInfo Fornisce la classe base per gli oggetti FileInfo e DirectoryInfo.
FileSystemWatcher Ascolta le notifiche di modifica del file system e genera eventi quando una directory, o un file in una directory, cambia.
InternalBufferOverflowException Eccezione generata quando il buffer interno è in overflow.
InvalidDataException Eccezione generata quando un flusso di dati è in un formato non valido.
IODescriptionAttribute Imposta la descrizione che i designer di oggetti visivi possono visualizzare quando fanno riferimento a un evento, un extender o una proprietà.
IOException Eccezione generata quando si verifica un errore di I / O.
MemoryStream Crea un flusso il cui archivio di backup è la memoria.
Sentiero Esegue operazioni su istanze String che contengono informazioni sul percorso di file o directory. Queste operazioni vengono eseguite in modo multipiattaforma.
PathTooLongException Eccezione generata quando un percorso o un nome file è più lungo della lunghezza massima definita dal sistema.
PipeException Generato quando si verifica un errore all'interno di una named pipe.
RenamedEventArgs Fornisce dati per l'evento Renamed.
Stream Fornisce una visualizzazione generica di una sequenza di byte. Questa è una classe astratta.
StreamReader Implementa un TextReader che legge i caratteri da un flusso di byte in una particolare codifica.
StreamWriter Implementa un TextWriter per scrivere caratteri in un flusso in una particolare codifica. Per esplorare il codice sorgente di .NET Framework per questo tipo, vedere la fonte di riferimento.
StringReader Implementa un TextReader che legge da una stringa.
StringWriter Implementa un TextWriter per scrivere informazioni su una stringa. Le informazioni vengono archiviate in uno StringBuilder sottostante.
TextReader Rappresenta un lettore in grado di leggere una serie sequenziale di caratteri.
TextWriter Rappresenta uno scrittore in grado di scrivere una serie sequenziale di caratteri. Questa classe è astratta.
UnmanagedMemoryAccessor Fornisce accesso casuale a blocchi di memoria non gestiti dal codice gestito.
UnmanagedMemoryStream Fornisce accesso a blocchi di memoria non gestiti dal codice gestito.
WindowsRuntimeStorageExtensions Contiene metodi di estensione per le interfacce IStorageFile e IStorageFolder in Windows Runtime durante lo sviluppo di app di Windows Store.
WindowsRuntimeStreamExtensions Contiene metodi di estensione per la conversione tra flussi in Windows Runtime e flussi gestiti nelle app .NET per Windows Store.

Esempio

L'esempio seguente crea un file chiamato test.txt, vi scrive un messaggio, legge il testo dal file e lo stampa sulla console.

Note - La quantità di codice necessaria per farlo è sorprendentemente inferiore!

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

Quando compili ed esegui il programma, restituisce il seguente output:

Hello There
Welcome to:
Tutorials Point