में कंसोल से पढ़ें क्या किसी को भी पता है कि कंसोल से पढ़ने के लिए printfn
फ़ंक्शन पर कोई अंतर्निहित फ़ंक्शन है या नहीं? अब तक देखा गया एकमात्र तरीका System.Console.Read()
का उपयोग कर रहा है लेकिन यह printfn
जैसे निर्माण का उपयोग करने के रूप में कार्यात्मक नहीं लगता है।F #
F #
उत्तर
यह वास्तव में एक शर्म की बात है कि ऐसा कोई अंतर्निहित कार्य नहीं है। हालांकि, जैसा कि ब्रायन ने बेंगलोल के उत्तर पर एक टिप्पणी में उल्लेख किया था, scanf
स्वयं को कार्य करना संभव है। यहाँ एक एक sscanf
संस्करण कैसे परिभाषित कर सकता है की एक त्वरित स्केच, है, हालांकि केवल %s
प्लेसहोल्डर कार्यान्वित कर रहे हैं:
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"
जहाँ तक मुझे पता है, नहीं।() और विभाजन/regex तुम क्या "बॉक्स से बाहर" का उपयोग कर सकते है
यह कोड गोल्फ :) TryParse की
यह एक शर्म की बात है 'printfn' समारोह ही संकलक जादू पर निर्भर करता है है - आप अपने खुद के एफ #' sscanf नहीं कर सके काफी अच्छा है। –
आप ऐसा कर सकते हैं, मुझे लगता है। एकमात्र जादू यह है कि स्ट्रिंग अक्षर को PrintfFormats पर ले जाया जा सकता है, जिस बिंदु पर प्रकार प्रकट होते हैं: पीएफ(): printfFormat <_, _, _, _> = "% d% s" – Brian
संयोजन के लिए आसान हो जाएगा।
पीएस मैंने http://www.codeproject.com/KB/recipes/csscanf.aspx देखा है और यह काम करता है;)
जब मुझे और अधिक पूर्ण करने की आवश्यकता होती है 'sscanf' का संस्करण, इस कोड को विस्तारित करना काफी आसान था। परिणाम यहां देखें: http://fssnip.net/4I – wmeyer
@wmeyer - यह कमाल है! – kvb
@wmeyer: क्या आप इसे FSharpx में योगदान देने में रुचि रखते हैं? https://github.com/fsharp/fsharpx –