2012-09-22 9 views
12

पर फ़ाइल के बजाय स्ट्रिंग/बफर को लिखता है। मेरे पास in_channel -> out_channel -> unit प्रकार का एक फ़ंक्शन है जो out_channel पर कुछ आउटपुट करेगा। अब मैं एक स्ट्रिंग के रूप में अपना आउटपुट प्राप्त करना चाहता हूं। इसे लिखने और पढ़ने के लिए अस्थायी फ़ाइलों को बनाना बदसूरत लगता है, तो मैं यह कैसे कर सकता हूं? out_channel को Pervasives.open_out परिवार के अलावा बनाने के लिए कोई और तरीका है?ओकैमल में, मैं एक आउट_चैनल कैसे बना सकता हूं जो डिस्क

दरअसल, इस फ़ंक्शन ने एक प्रतिलिपि लागू की। मुझे वास्तव में इसकी ज़रूरत है कि इसे प्रोग्रामेटिक रूप से जांचें, इसलिए मैं इसे पहले string -> string के फ़ंक्शन पर लपेटना चाहता हूं। in_channel बनाने के लिए, ऐसा लगता है कि मैं Scanf.Scanning.from_string का उपयोग कर सकता हूं, लेकिन मुझे नहीं पता कि out_channel पैरामीटर कैसे बनाएं। http://ocaml-batteries-team.github.com/batteries-included/hdoc/BatIO.html

यह उनकी इनपुट/आउटपुट प्रकार का उपयोग करने को कह सकता:

+1

मुझे नहीं लगता कि ऐसा करने का कोई तरीका है। यह मुश्किल होगा, क्योंकि तारों की ओकैमल में निश्चित लंबाई होती है। वे पात्रों को स्टोर करने के लिए एक विस्तारणीय जगह के रूप में वास्तव में उपयुक्त नहीं हैं। आप Printf.sprintf का उपयोग उसी सामग्री के साथ स्ट्रिंग बनाने के लिए कर सकते हैं जो Printf.fprintf आउटपुट चैनल को लिखता है। लेकिन इसके अलावा, आपको अपना खुद का तंत्र बनाना पड़ सकता है। फ्यूचर पाठकों के लिए –

उत्तर

6

OCaml बैटरियों शामिल अपने BatIO मॉड्यूल में output_string और output_buffer कार्य करता है जो आप चाहते करने के लिए लग रहे हैं।

+0

, यह अब बैटबफर लाइब्रेरी में स्थित है: http://ocaml-batteries-team.github.io/batteries-included/hdoc2/BatBuffer.html – yago

3

आप Unix मॉड्यूल पर निर्भर अपने परीक्षण से परहेज नहीं करते हैं, तो आप Unix.pipe का उपयोग एक फ़ाइल वर्णनकर्ता जोड़ी बनाने के लिए कर सकते हैं, पठनीय ओर से एक in_channel, एक out_channel लिखने योग्य तरफ से बनाते हैं और फिर स्ट्रिंग लिखने लिखने योग्य पक्ष के लिए और परीक्षण के तहत कोड में in_channel पास करें।

val pipe : unit -> file_descr * file_descr 

एक पाइप बनाएँ। परिणाम का पहला घटक पढ़ने के लिए खोला गया है, यह पाइप से बाहर निकलना है। दूसरा घटक लिखने के लिए खोला गया है, यह पाइप के प्रवेश द्वार है।

val in_channel_of_descr : file_descr -> Pervasives.in_channel 

दिए गए वर्णनकर्ता से एक इनपुट चैनल पढ़ना। चैनल प्रारंभ में बाइनरी मोड में है; टेक्स्ट मोड वांछित होने पर set_binary_mode_in ic झूठी का उपयोग करें।

val out_channel_of_descr : file_descr -> Pervasives.out_channel 

दिए गए वर्णनकर्ता पर आउटपुट चैनल लेखन बनाएं। चैनल प्रारंभ में बाइनरी मोड में है; टेक्स्ट मोड वांछित होने पर set_binary_mode_out oc झूठी का उपयोग करें।

यूनिक्स पाइप उच्च थ्रूपुट वाले किसी भी चीज़ के लिए थोड़ा भारी वजन है, लेकिन उन्हें परीक्षण-दोहन के लिए ठीक होना चाहिए।

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