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" trueQuando 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: trueLa 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" msgQuando compili ed esegui il programma, restituisce il seguente output:
Hello There
Welcome to:
Tutorials Point