2012-03-09 8 views
6

मैं स्ट्रिंग से फ्लोट प्राप्त करने की कोशिश कर रहा हूं। मेरा मतलब है कि एक टेक्स्ट फ़ाइल से लाइन को लाइन से पढ़ना और एक रेखा से फ्लोट प्राप्त करना। मैंने पाया कि रेखा से लाइन कैसे पढ़ा जाए लेकिन मैं स्ट्रिंग को फ्लोट में विभाजित नहीं कर सका।ओकंपल स्ट्रिंग 4 फ्लोट्स

10,10,18,18.1

7,3, 10,14.2

3,3,5.3,5

मैं देखा है: यहाँ एक उदाहरण इनपुट फ़ाइल है sscanf लेकिन मैं इसे नहीं कर सका। कोई उपाय?

उत्तर

8

अनुभव के वर्षों से, मैंने पाया है कि स्कैनफ़ा ठीक वही करने की संभावना नहीं है जो आप चाहते हैं। यह एक त्वरित परीक्षण कार्यक्रम के लिए ठीक है।

एक संभावना यह Str.split उपयोग करने के लिए है:

let floats_of_string s = 
    List.map float_of_string (Str.split (Str.regexp "[, \t]+") s) 

आप regexp एक छोटे से तंग बनाने के लिए आवश्यकता हो सकती है यदि आप अमान्य इनपुट पता लगाने के लिए चाहते हैं।

6

स्कैनफ़ प्रारूप कैसे काम करता है यह समझने के लिए मैन्युअल रूप से मैन्युअल पढ़ें - इसमें कुछ quirks है लेकिन उनके पीछे एक कारण है।

"%f , %f , %f , %f %!" 
+1

यह समाधान Scanf.sscanf :-) के साथ ठीक काम करता है – cago

संबंधित मुद्दे