2010-11-30 8 views
6

मेरा प्रश्न काफी सरल है। मुझे विंडोज टेक्स्ट फ़ाइल से सभी टेक्स्ट लाइनों को प्राप्त करने की आवश्यकता है। सभी लाइनें \ r \ n प्रतीकों से अलग होती हैं। मैं स्ट्रिंग का उपयोग करता हूं। स्प्लिट, लेकिन यह अच्छा नहीं है, क्योंकि यह केवल खाली प्रतीक को छोड़कर 'एक प्रतीक द्वारा' विभाजित करता है जिसे मुझे विकल्प ध्वज के साथ हटाने की आवश्यकता होती है। क्या कोई बेहतर तरीका है? coz GetFromSomeWhere वास्तव में रेगुलर एक्सप्रेशन से है, इसलिए मैं इस बिंदु के बाद कोई फ़ाइल हैविंडोज टेक्स्ट फ़ाइल (/ आर/एन अलगाव) से लाइनों को कैसे विभाजित करें

मेरे कार्यान्वयन

string wholefile = GetFromSomeWhere(); 

// now parsing 
string[] lines = operationtext.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 

// ok now I have lines array 

अद्यतन

File.ReadAllXXX यहाँ किसी काम का नहीं है।

+0

निश्चित रूप से यह [प्रस्ताव] देखें (http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 " को़ड समीक्षा")। यह लगभग है, बस थोड़ा और समर्थन की आवश्यकता है :) – greatwolf

उत्तर

15

आप String.Split की this overload है, जो तार की एक सरणी है कि डिलीमीटर के रूप में सेवा कर सकते हैं लेता है का उपयोग कर सकते उपयोग करने के लिए मिल सकता है:

string[] lines = operationtext.Split(new[] { Environment.NewLine }, 
            StringSplitOptions.RemoveEmptyEntries); 
के

बेशक, यदि आपके पास पहले से फ़ाइल-पथ है, तो File.ReadAllLines:

का उपयोग करना बहुत आसान है 10
+1

उपयोग नहीं कर सकता है, लेकिन अगर मैं प्रतिबिंब में देखता हूं तो क्या होता है –

+1

@ कैप्टन कॉमिक: अपने प्रश्न का उत्तर देने के लिए, .NET 3.5 पर, मैं देख सकता हूं कि 'फ़ाइल। रीडअललाइन' फ़ाइल लाइन को लाइन से पढ़ने के लिए 'StreamReader' का उपयोग करता है, प्रत्येक पंक्ति को' ArrayList' में लोड करता है। इसके बाद यह 'ArrayList.ToArray' विधि के साथ एक स्ट्रिंग-सरणी में बदल जाता है। – Ani

+0

@ कैप्टन कॉमिक: आप बताए बिना क्यों "उपयोग नहीं कर सकते" क्यों कहते हैं। मुझे समझ में नहीं आता कि इन दोनों तरीकों में से एक या दोनों ठीक से नहीं करेंगे जो आप पूछ रहे हैं। –

4

स्ट्रिंग। स्प्लिट एक स्ट्रिंग स्वीकार करता है (जैसे "\ r \ n")। सिर्फ एक chararray नहीं।

string[] lines = wholetext.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); 
3

आप नीचे एक तरह एक विस्तार विधि इस्तेमाल कर सकते हैं और अपने कोड तो इस प्रकार दिखाई देगा:

var lines = operationText.ReadAsLines(); 

एक्सटेंशन विधि कार्यान्वयन:

public static IEnumerable<string> ReadAsLines(this string text) 
    { 
     TextReader reader = new StringReader(text); 
     while(reader.Peek() >= 0) 
     { 
      yield return reader.ReadLine(); 
     } 
    } 

मैं इसे के रूप में के रूप में performant नहीं है अनुमान लगा रहा हूँ स्प्लिट विकल्प जो आमतौर पर बहुत ही सक्षम होता है लेकिन यदि यह कोई मुद्दा नहीं है ...

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