2010-02-10 17 views
5

संभव डुप्लिकेट:
How to read a text file reversely with iterator in C#.net: क्या नीचे से ऊपर तक एक txt फ़ाइल पढ़ने का कोई तरीका है?

अगर कोई प्रदर्शन दंड के बिना शीर्ष पर नीचे से एक पाठ फ़ाइल को पढ़ने के लिए एक रास्ता है मैं सोच रहा हूँ, ReadLine, movenext दृष्टिकोण है, लेकिन उलट , इस तरह की चीज .NET में संभव है?

मामलों और अधिक दिलचस्प पाठ फ़ाइल उस में चारों ओर 100 000 लाइनों है बनाने के लिए, तो मैं एक readall साथ धोखा नहीं कर सकता, रिवर्स ...

कुछ और अधिक विस्तार: मैं भेजे स्ट्रिंग मूल्यों का एक संग्रह है यह एक int आईडी के साथ prefixed है जिसे हल किया जा सकता है। दुर्भाग्यवश मुझे इन आईडी को गलत क्रम में मिलता है। मुख्य मुद्दा स्ट्रिंग मानों की तीव्र मात्रा है, और समाधान में कोई आरडीबीएमएस नहीं है। इसलिए मुझे स्ट्रिंग मानों को स्टोर करने के लिए वास्तव में एक तरीका चाहिए और फिर प्रसंस्करण के दौरान भंडारण के क्रम को उलट दें। पाठ फ़ाइल को ध्यान में आया क्योंकि मेरे पास समय पर इस समय बेहतर समाधान नहीं है।

अग्रिम धन्यवाद।

+0

कम भूमि के ऊपर "झांकना" विधि किसी प्रकार की होनी चाहिए। –

+3

क्या आपका मतलब नीचे से नीचे नहीं है? –

+1

हाँ, ऊपर से नीचे मानक तरीका की तरह ... –

उत्तर

-1

StreamReader क्लास की रीडब्लॉक विधि आपको एक विशिष्ट स्थिति से पढ़ने देती है। प्रदर्शन के बारे में निश्चित नहीं है, हो सकता है कि आप इसे केवल सरणी में पढ़ना चाहें, फिर इसे उलट दें।

+0

दुर्भाग्य से कर सकते हैं, को छोड़कर मैं यह सब स्मृति की कमी और उच्च मात्रा के कारण एक संग्रह में लोड करने के बिंदु से परे हूँ,। –

+0

रीडब्लॉक आपको उस सरणी में एक विशिष्ट स्थिति * में * पढ़ने देता है जो इसे लिख रहा है। यह आपको पाठक के भीतर * से * पढ़ने के लिए इंडेक्स निर्दिष्ट नहीं करने देता है। –

0

ठीक है, अगर तुम गहरा गोता करने के लिए आप शायद एक द्विआधारी रीडर का उपयोग करें और अपने खुद पढ़ने कर सकता को तैयार हैं ...

आप रिवर्स में लाइन अंत यह पता लगाने की होगा, और कैसे यह पता लगाने यह सुनिश्चित करने के लिए कि आपके पास सही एन्कोडिंग है।

मैं कहूंगा कि मैं बहुत कहूंगा।

+0

आप सही हैं, यह एक दर्द है। काफी रोचक हालांकि :) –

0

बस एक सामान्य उत्तर। अगर peek() विधि का कोई प्रकार है, तो आप शायद अपने फ़ाइल पॉइंटर को filesize (या filesize - 1?) पर सेट कर सकते हैं और उसके बाद पॉइंटर को तब तक घटा सकते हैं जब तक आप 0 तक नहीं पहुंच जाते। .NET में कुछ वर्ग हो सकता है जो इसे बाहर निकाल देता है। बेशक, आपको किसी प्रकार के बफर आकार को परिभाषित करना होगा (मूल रूप से उस फ़ाइल के "भाग" के आकार को परिभाषित करें जिसे आप पढ़ रहे हैं)। उस स्थिति में, filesize - 1 ऊपर filesize - bufferSize बन सकता है, और आप bufferSize द्वारा भी अपनी फ़ाइल सूचक को बढ़ाएंगे।

0

मुझे लगता है कि आप यह कर सकते हैं यह WinPI के माध्यम से ऐसा करने के लिए PInvoke का उपयोग कर सकते हैं। आपको मेमोरी मैप की गई फाइल बनाने की ज़रूरत है, लेकिन केवल फाइल के अंत को मैप करें और फिर ऊपर जाएं।

0

तो आपको गलत क्रम में मान मिलते हैं लेकिन उन्हें सही क्रम में पुनः प्राप्त करना चाहते हैं। हो सकता है कि एक

Stack<T> 

आप के लिए काम करेगा।

http://msdn.microsoft.com/en-us/library/3278tedw.aspx

एक चर आकार पिछले-इन-फर्स्ट-आउट (LIFO) एक ही मनमाना प्रकार के उदाहरण का संग्रह का प्रतिनिधित्व करता है।

+0

धन्यवाद, यह बहुत अच्छा ज्ञान है लेकिन दुर्भाग्य से मैं मूल रूप से बैच कॉल की एक श्रृंखला का उपयोग करके अपनी सूची तैयार करता हूं, अन्यथा यह बहुत अच्छा काम करेगा। –

1

स्ट्रीमरडर वर्ग की ReadToEnd() विधि का उपयोग क्यों न करें, फिर पीछे की ओर काम करें ... वैसे यह सुंदर नहीं है, लेकिन यह काम करता है, मैं एक MemoryStream उदाहरण और उपयोग कि StreamReader उदाहरण के लिए, सूचक दग़ा का उपयोग कर, डेटा एक पिछड़े फैशन में पढ़ने के लिए है बनाने के लिए एक बाइट सारणी का प्रयोग किया।

 
unsafe 
{ 
    byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes("Hello World! Foo wuz ere and so wuz bar"); 
    using (MemoryStream mStream = new MemoryStream(b)) 
    { 
     string readStr; 
     using (StreamReader sr = new StreamReader(mStream)) 
     { 
      readStr = sr.ReadToEnd(); 
     } 
     Console.WriteLine(readStr); 
     fixed (char* beg = readStr) 
     { 
      char* p = beg + readStr.Length; 
      while (p-- != beg) 
      { 
       Console.Write(*p); 
      } 
     } 
    } 
} 

आशा इस मदद करता है, सादर, टॉम।

+0

डांग! जब मैं कोड का परीक्षण कर रहा था तो इसे बंद करने से पहले बस इसे पोस्ट किया ... श्वास – t0mm13b

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