Qualcuno sa se esiste una funzione incorporata per la lettura dalla console allo stesso modo della funzione printfn
? L'unico metodo che ho visto finora è l'utilizzo di System.Console.Read()
ma non sembra funzionale quanto l'utilizzo di un costrutto come printfn
.Lettura da Console in F #
risposta
È davvero un peccato che non ci sia tale funzione integrata. Tuttavia, come Brian ha menzionato in un commento sulla risposta di Benjol, è possibile creare autonomamente una funzione scanf
. Ecco un rapido schizzo di come si potrebbe definire una variante sscanf
, anche se solo %s
segnaposti sono implementate:
open System
open System.Text
open System.Text.RegularExpressions
open Microsoft.FSharp.Reflection
let sscanf (pf:PrintfFormat<_,_,_,_,'t>) s : 't =
let formatStr = pf.Value
let constants = formatStr.Split([|"%s"|], StringSplitOptions.None)
let regex = Regex("^" + String.Join("(.*?)", constants |> Array.map Regex.Escape) + "$")
let matches =
regex.Match(s).Groups
|> Seq.cast<Group>
|> Seq.skip 1
|> Seq.map (fun g -> g.Value |> box)
FSharpValue.MakeTuple(matches |> Seq.toArray, typeof<'t>) :?> 't
let (a,b) = sscanf "(%s, %s)" "(A, B)"
let (x,y,z) = sscanf "%s-%s-%s" "test-this-string"
Per quanto ne so, no.
sarebbe utile per il codice di golf :)
E 'un peccato che il 'funzione di printfn' si basa sulla magia del compilatore - non si poteva fare il proprio F #' sscanf "altrettanto bello. –
Puoi farlo, credo. L'unica magia è che i letterali stringa possono essere forzati a PrintfFormats, a quel punto i tipi sono manifest: let pf(): PrintfFormat <_, _, _, _> = "% d% s" – Brian
Combinazione di TryParse() e split/regex è ciò che è possibile utilizzare "out of box".
P.S. ho visto http://www.codeproject.com/KB/recipes/csscanf.aspx e funziona;)
- 1. Timeout lettura console
- 2. Lettura della password dalla console in Scala
- 3. come mettere in pausa la console in linguaggio F #
- 4. Lettura da un file gzip in python
- 5. Lettura da un file app.config
- 6. file di lettura con risultati XMLHttpRequest errore di immissione console
- 7. Registrazione da un'applicazione console
- 8. Lettura da file
- 9. F # ciclo continuo in F #
- 10. Lettura da stdin
- 11. Lettura XML da Stream
- 12. Lettura da System.in - Java
- 13. Lettura alimentazione da usb
- 14. Come utilizzare HttpClient da F #?
- 15. Lettura non bloccante da I/O standard in C#
- 16. Come chiamo Enumerable.Join da F #?
- 17. in F #
- 18. lettura da unordered_map const
- 19. Lettura valori da DataTable
- 20. Connessione a Oracle da F #
- 21. Utilizzo di OpenCV da F #
- 22. Lettura di System.in per Intellij tramite la console
- 23. la lettura da stdin in C++
- 24. Lettura dei dati da DataGridView in C#
- 25. interi lettura da un file in Chuck
- 26. Lettura JSON da URL remoto in PHP
- 27. Lettura da un enorme MemoryStream in C#
- 28. Lettura di dati da Excel in Haskell
- 29. Lettura da un array PHP in JQuery
- 30. Come dividere F [A \/B] in (F [A], F [B])
Quando avevo bisogno di un più completo versione di 'sscanf', è stato abbastanza facile estendere questo codice. Guarda il risultato qui: http://fssnip.net/4I – wmeyer
@wmeyer - È fantastico! – kvb
@wmeyer: sareste interessati a contribuire a FSharpx? https://github.com/fsharp/fsharpx –