2012-02-29 10 views
6

क्या यह संभव है, और यदि हां यह कैसे किया जाता है? सामान्य > और >> जो Windows या Linux कमांड लाइन पर काम करते हैं, इस संदर्भ में काम नहीं करते हैं।स्कैला इंटरएक्टिव दुभाषिया (आरईपीएल) - आउटपुट को टेक्स्ट फ़ाइल में रीडायरेक्ट कैसे करें?

उत्तर

11

आप इसे programmaticaly कंसोल से कर सकते हैं: अब से सभी print और println पर

import java.io.FileOutputStream 
import scala.Console 

Console.setOut(new FileOutputStream("<output file path>")) 

इस फ़ाइल में निर्देशित किया जाएगा

+0

'सेटऑट' 2.9 आरपीएल में काम नहीं कर रहा है [एसआई -47 9 3] (https://issues.scala-lang.org/browse/SI-4793)। देखें [मेरा जवाब] (http://stackoverflow.com/questions/7219316/println-vs-system-out-println-in-scala/7219519#7219519) – 4e6

+1

हालांकि सही नहीं है, मैं स्वीकार कर रहा हूं कि यह सबसे अधिक है उपयोगी उत्तर मुझे लगता है कि जब तक मैं आरईपीएल से बाहर नहीं निकलता तब तक फाइल में कुछ भी नहीं होता है। आस-पास पाने के लिए 'फ़ाइलऑटपुटस्ट्रीम' को 'वैल' में संग्रहीत करना और फ़ाइल पर सामग्री को फ़्लश करने के लिए उस पर 'बंद करें' को कॉल करना शामिल है। – Gigatron

4

यह अपने प्रश्न से स्पष्ट नहीं वास्तव में कैसे आप ऐसी बात का उपयोग करना चाहते है । आप जो करने की कोशिश कर रहे हैं उसका एक उदाहरण मदद कर सकता है।

यहां एक निहित कार्य है जो एक साधारण ऑपरेटर जोड़ देगा जो किसी ऑब्जेक्ट को किसी फ़ाइल को स्ट्रिंग के रूप में लिखता है। (ध्यान दें कि मैं >> उपयोग कर रहा हूँ मतलब करने के लिए यूनिक्स शैली > पहले से ही स्काला ("कम से कम") में अर्थ है > के बाद से। आप यदि चाहें तो कुछ अन्य ऑपरेटर के साथ इस जगह ले सकता है।)

implicit def anyToFileOutput(self: Any) = new { 
    import java.io._ 
    def >>(filename: String) { 
    val f = new BufferedWriter(new FileWriter(filename)) 
    try { 
     f.write(self.toString) 
    } finally { 
     if (f != null) 
     f.close() 
    } 
    } 
} 

आप होगा इस तरह इसका इस्तेमाल:

scala> List(1,2,3) >> "out.txt" 

कौन सा काम कर निर्देशिका युक्त List(1, 2, 3)

+0

यही वह है जो मैं करने की कोशिश कर रहा हूं - उदाहरण के लिए, यदि मैं 'गणना कुछ कहता हूं (ए, बी, सी)' जो 'इंट' की एक सूची देता है, आदर्श रूप से यह 'प्रिंट' और 'प्रिंटल' फ़ाइल में 'गणना कुछ' के भीतर बयान, और लौटाई गई सूची परिणाम फ़ाइल में भी भेजें। – Gigatron

0

मेरे लिए ठीक काम करने लगता है में "out.txt" फ़ाइल का उत्पादन:

[email protected]:~/github/scala (master)$ scala -e "println(2 * 2)" > output 
[email protected]:~/github/scala (master)$ cat output 
4 
+1

धन्यवाद, लेकिन यह ओएस कमांड लाइन पर है, एक चल रहे आरईपीएल सत्र में नहीं। – Gigatron

+1

@ गीगाट्रॉन प्रिंटिंग के बजाय स्ट्रिंग उत्पन्न करें, और फिर फ़ाइलों को भेजना आसान है। फिर फिर, यदि आपने अपने वांछित समाधान को कार्यान्वित करने के तरीके के बारे में पूछने के बजाय जो हासिल करना चाहते हैं, तो हम सभी अधिक उपयोगी हो सकते हैं। –

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