Konsoldan printfn
işlevine benzer bir okuma işlevi olup olmadığını bilen var mı? Şimdiye kadar gördüğüm tek yöntem, System.Console.Read()
kullanıyor ama printfn
gibi bir yapı kullanmak kadar işlevsel değil.F # Konsolundan Oku #
cevap
Gerçekten de böyle bir yerleşik işlev olmadığı konusunda utanç vericidir. Ancak, Brian Benjol'un cevabına yaptığı bir yorumda belirttiği gibi, bir scanf
işlevini kendiniz oluşturmak mümkündür. Sadece %s
tutucuları uygulanmasına rağmen Burada biri sscanf
varyantını tanımlamak nasıl hızlı bir kroki, var:
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"
Bildiğim kadarıyla, hayır.
O TryParse kod golf :)
O 'printfn' fonksiyon kendisi derleyici sihirli dayanan bir utanç - Kendi F #' sscanf gelemedi 'oldukça güzel. –
Yapabilirsin, sanırım. Tek sihir, dize değişmezlerinin PrintfFormats'a zorlanabilmesidir, bu noktada tipler belirgindir: pf(): printfFormat <_, _, _, _> = "% d% s" – Brian
Kombinasyon için kullanışlı olacaktır() ve split/regex siz "kutunun dışında" kullanabilirsiniz şeydir.
P.S. http://www.codeproject.com/KB/recipes/csscanf.aspx'u gördüm ve çalışıyor;)
- 1. konsolundan Cassini'yi çalıştırın
- 2. Öğelerden HTML dosyasını oku
- 3. Parçalar içinde dosya oku - RAM kullanımı, ikili dosyalardaki dizeleri oku
- 4. `document.execCommand ('copy');` geliştirici konsolundan kullanılamıyor
- 5. Oku ADO.NET
- 6. Oku NSURLresponse
- 7. Oku "VarInt"
- 8. Ondalık Dönüşüm F # Senaryo F # Interactive F #
- 9. F System.String.Split kullanarak F #
- 10. F #
- 11. F #
- 12. F #
- 13. F #:
- 14. F #
- 15. F arasında sıralama sıralama F #
- 16. Yayınlanan uygulamanın geliştirici konsolundan nasıl silinir android
- 17. Plunker kullanma, Tarayıcı konsolundan değişkene erişme
- 18. google oyun geliştirici konsolundan görüntüleri indirebilirim
- 19. Chrome'un Javascript konsolundan nasıl giriş alınır?
- 20. Bir başlatıcıyı ray konsolundan nasıl çalıştırabilirim?
- 21. NodeJS, arabelleği soket konsolundan gönderdikten sonra tamponun
- 22. google-services.json, Developer konsolundan nasıl edinilir?
- 23. R çıkışını bellekten matrise oku (paket tıklatma)
- 24. Firefox 3 işaretlerini oku
- 25. java jpeg2000 dosyalarını oku
- 26. Spark'den String dizisini oku
- 27. Zend_Http_Client - Akıştan Oku?
- 28. Listeler arasında oku çiz
- 29. LINUX üzerinde XML oku
- 30. GmailApi okunmamış mesajları oku
Daha fazla ihtiyacım olduğunda 'sscanf' sürümü, bu kodu genişletmek oldukça kolaydı. Buradaki sonuca bakın: http://fssnip.net/4I – wmeyer
@wmeyer - Bu harika! – kvb
@wmeyer: FSharpx'e katkıda bulunmak ister misiniz? https://github.com/fsharp/fsharpx –