2012-03-17 13 views
5

मुझे 65000 वर्णों तक सी # में कंसोल से वेरीरी लंबी लाइन लोड करने की आवश्यकता है। Console.ReadLine ही 254 वर्ण (भागने दृश्यों के लिए +2) की एक सीमा होती है, लेकिन मैं इस का उपयोग कर सकते हैं:सी # में कंसोल से बहुत लंबे इनपुट को कैसे पढ़ा जाए?

static string ReadLine() 
{ 
    Stream inputStream = Console.OpenStandardInput(READLINE_BUFFER_SIZE); 
    byte[] bytes = new byte[READLINE_BUFFER_SIZE]; 
    int outputLength = inputStream.Read(bytes, 0, READLINE_BUFFER_SIZE); 
    Console.WriteLine(outputLength); 
    char[] chars = Encoding.UTF7.GetChars(bytes, 0, outputLength); 
    return new string(chars); 
} 

..., उस सीमा से उबरने के लिए अप करने के लिए 8190 वर्ण (भागने दृश्यों के लिए 2 के लिए) - दुर्भाग्यवश मुझे बड़ी लाइन में प्रवेश करने की आवश्यकता है, और जब READLINE_BUFFER_SIZE 8192 से बड़ा कुछ भी सेट किया गया है, तो त्रुटि "इस आदेश को संसाधित करने के लिए पर्याप्त संग्रहण उपलब्ध नहीं है" VS में दिखाई देता है। बफर को 65536 पर सेट किया जाना चाहिए। मैंने ऐसा करने के लिए कुछ समाधान करने की कोशिश की है, फिर भी मैं अभी भी सीख रहा हूं और कोई भी 1022 या 81 9 0 वर्णों से अधिक नहीं है, मैं उस सीमा को 65536 तक कैसे बढ़ा सकता हूं? अग्रिम में धन्यवाद।

+1

क्या आप इनपुट को किसी अस्थायी फ़ाइल में डंप नहीं कर सकते हैं और बस फ़ाइल नाम को कंसोल में पास कर सकते हैं? – digEmAll

+0

मैं 8190 से अधिक वर्ण टाइप नहीं कर सकता, यह बस मुझे अब प्रवेश करने की अनुमति नहीं देगा। मैं डेटा को फ़ाइल में सहेज सकता हूं, फिर भी मुझे भारी इनपुट प्राप्त करने का एक तरीका चाहिए। –

+1

आपका परिदृश्य क्या है? मुझे सच में यकीन नहीं है कि आप सही समस्या को हल करने की कोशिश कर रहे हैं – Onkelborg

उत्तर

1

StringBuilder

साथ Console.Read कोशिश
 StringBuilder sb =new StringBuilder(); 
     while (true) { 
      char ch = Convert.ToChar(Console.Read()); 
      sb.Append(ch); 
      if (ch=='\n') { 
       break; 
      } 
     } 
+0

यह काम किया, धन्यवाद :) मैंने इसका उपयोग करने की कोशिश की है, लेकिन मैंने \ r \ n, \ n नहीं किया है, और यह सिर्फ ब्रेक निर्देश छोड़ दिया है। –

+0

आप लोगों को यह काम करने के लिए वास्तव में कैसे मिला। मुझे एक कंसोल एप्लिकेशन चाहिए जो बिगइंटर या बस वास्तव में बड़ी संख्या में ले सकता है और मुझे यह काम करने के लिए प्रतीत नहीं होता .. मैं केवल कंसोल .etIn (नया StreamReader (Console.OpenStandardInput (8192) का उपयोग करके अधिकतम इनपुट प्राप्त कर सकता हूं।)); ' – Chisx

1

आप अपने main() विधि में कोड की निम्न पंक्ति जोड़ने के लिए:

byte[] inputBuffer = new byte[4096]; 
       Stream inputStream = Console.OpenStandardInput(inputBuffer.Length); 
       Console.SetIn(new StreamReader(inputStream, Console.InputEncoding, false, inputBuffer.Length)); 

तो फिर तुम Console.ReadLine() का उपयोग कर सकते हैं; लंबे उपयोगकर्ता इनपुट पढ़ने के लिए।

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