2011-06-24 15 views
12

मैं क्या करना चाहता हूं एक पाठ फ़ाइल में एक स्ट्रिंग के सभी उदाहरण मिलते हैं, फिर एक सरणी में कहा स्ट्रिंग वाली पूर्ण पंक्तियां जोड़ें।विशिष्ट स्ट्रिंग खोजें और पूरी लाइन वापस करें

उदाहरण के लिए:

eng GB English 
lir LR Liberian Creole English 
mao NZ Maori 

खोज eng, उदाहरण के लिए, सरणी पहले दो लाइनों को जोड़ना होगा, निश्चित रूप से फ़ाइल में 'eng' के कई अधिक उदाहरण भी शामिल है।

टेक्स्ट फ़ाइल इनपुट और सी # का उपयोग करके यह कैसे किया जा सकता है?

उत्तर

15

आप इसके लिए खोज, प्रत्येक पंक्ति को पढ़ने के लिए और यदि आप पाते हैं यू क्या चाहते TextReader उपयोग कर सकते हैं, तो स्ट्रिंग सरणी

List<string> found = new List<string>(); 
string line; 
using(StreamReader file = new StreamReader("c:\\test.txt")) 
{ 
    while((line = file.ReadLine()) != null) 
    { 
     if(line.Contains("eng")) 
     { 
     found.Add(line); 
     } 
    } 
} 

में है कि लाइन जोड़ने के लिए या आप yield return उपयोग कर सकते हैं enumurable वापस जाने के लिए

0

आप नीचे दिए गए कोड की कोशिश कर सकते हैं, मैं इसे करने की कोशिश की और यह काम कर रहा था

string searchKeyword = "eng"; 
string fileName = "Some file name here"; 
string[] textLines = File.ReadAllLines(fileName); 
List<string> results = new List<string>(); 

foreach (string line in textLines) 
{ 
    if (line.Contains(searchKeyword)) 
    { 
     results.Add(line); 
    } 
} 
7

एक पंक्ति:

+०१२३५१६४१०६१
using System.IO; 
using System.Linq; 

var result = File.ReadAllLines(@"c:\temp").Select(s => s.Contains("eng")); 

या, यदि आप कुशल समाधान एक अधिक स्मृति चाहते हैं, आप एक विस्तार विधि रोल कर सकते हैं। आप आधार हैंडलर के रूप में FileInfo, FileStream, आदि का उपयोग कर सकते हैं:

public static IEnumerable<string> ReadAndFilter(this FileInfo info, Predicate<string> condition) 
{ 
    string line; 

    using (var reader = new StreamReader(info.FullName)) 
    { 
     while ((line = reader.ReadLine()) != null) 
     { 
      if (condition(line)) 
      { 
       yield return line; 
      } 
     } 
    } 
} 

उपयोग:

var result = new FileInfo(path).ReadAndFilter(s => s.Contains("eng")); 
0

File वस्तु एक स्थिर ReadLines विधि है कि ReadAllLines साथ पंक्ति-दर-पंक्ति देता है, इसके विपरीत में शामिल जो एक सरणी देता है और इस प्रकार स्मृति में पूरी फ़ाइल लोड करने की आवश्यकता है।

var found = File.ReadLines().Where(line => line.Contains("eng")).ToArray(); 

मूल प्रश्न का सवाल है, यह, line.StartsWith साथ line.Contains की जगह आगे अनुकूलित किया जा सकता है के रूप में ऐसा लगता है की आवश्यकता:

तो, File.ReadLines और एक कुशल और कम समाधान का उपयोग कर LINQ द्वारा के रूप में लिखा जा सकता है प्रत्येक पंक्ति की शुरुआत में शब्द प्रकट होता है।

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