2013-03-21 4 views
10

मैं सी # के लिए नया हूं और मैंने StreamReader का उपयोग करना शुरू कर दिया है। मैं एक समय में एक फ़ाइल को एक पंक्ति पढ़ने की कोशिश कर रहा हूं और लाइन को आउटपुट करता हूं जब यह "I/RPTGEN" जैसे विशिष्ट कीवर्ड से मेल खाता है।एक समय में एक सीएसवी फ़ाइल को एक पंक्ति को कैसे पढ़ा जाए और कीवर्ड का विश्लेषण करें

अब तक मुझे पता चला है कि पूरी फ़ाइल को स्ट्रिंग में कैसे पढ़ा जाए, लेकिन मुझे यह समझने में परेशानी हो रही है कि एक समय में इसे एक पंक्ति को कैसे पढ़ा जाए।

मेरा कोड अब तक यह है।

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication5 
{ 
class Test 
{ 
    public static void Main() 
    { 
     try 
     { 
      using (StreamReader sr = new StreamReader("c:/temp/ESMDLOG.csv")) 
      { 
       String line = sr.ReadToEnd(); 
       Console.WriteLine(line); 

       Console.ReadLine(); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("The File could not be read:"); 
      Console.WriteLine(e.Message); 

      Console.ReadLine(); 
     } 
    } 
} 
} 

प्लस यहां फ़ाइल में एक पंक्ति का नमूना है।

सलाहकार, 2/27/2013 00:00:44, आई/RPTGEN (cadinterface), आई/RPTGEN विफल - त्रुटि 500 ​​- आंतरिक सर्वर त्रुटि - एक रिपोर्ट के अनुरोध के लिए लौट आए (जाँच URL के लिए लॉग इन करें) ।

+5

@Tosi उनका सवाल शीर्षक में था "कैसे एक सीएसवी एक समय में एक लाइन फाइल और कीवर्ड्स पार्स आउट कर पढ़ने के लिए"। इतना कठोर मत बनो। –

उत्तर

18

अपनी CSV फ़ाइल सिर्फ एक पंक्ति है, तो ReadToEnd स्वीकार्य हो सकता है, लेकिन अगर आप एक लॉग तो एक से अधिक पंक्ति से बना फ़ाइल है यह StreamReader वस्तु की ReadLine का उपयोग कर लाइन द्वारा लाइन को पढ़ने के लिए बेहतर है

using (StreamReader sr = new StreamReader("c:/temp/ESMDLOG.csv")) 
{ 
    string currentLine; 
    // currentLine will be null when the StreamReader reaches the end of file 
    while((currentLine = sr.ReadLine()) != null) 
    { 
     // Search, case insensitive, if the currentLine contains the searched keyword 
     if(currentLine.IndexOf("I/RPTGEN", StringComparison.CurrentCultureIgnoreCase) >= 0) 
     { 
      Console.WriteLine(currentLine); 
     } 
    } 
} 
+0

उत्तर के लिए सभी को धन्यवाद। इसने मुझे अपनी परियोजना को खत्म करने के करीब gt की अनुमति दी है। – Steve

+0

क्या होगा यदि मैं दिनांक और सीरियल नंबर जैसे कई कीवर्ड ढूंढ रहा था और यह भी होगा कि मेरे सीएसवी में कई कीवर्ड हैं जिनमें दिनांक शामिल है। समाप्ति तिथि बनाम दिनांक, मैं किस कीवर्ड को देखने के लिए नियंत्रित करूं? आपको बहुत - बहुत धन्यवाद! –

+0

क्षमा करें, लेकिन वर्तमान जानकारी के साथ मैं जवाब नहीं दे सकता। एक नए प्रश्न के बारे में क्या है जहां आप सभी आवश्यकताओं को निर्दिष्ट करते हैं? सिर्फ मुझसे ज्यादा लोग आपकी समस्या देखेंगे। बेशक आप इस सवाल पर एक लिंक जोड़ सकते हैं और मुझे नए प्रश्न के दूसरे लिंक के साथ सूचित कर सकते हैं। – Steve

6

एक और तरीका है एक समय में एक लाइन को पढ़ने के लिए है:

var searchItem = "Error 500"; 

var lines = File.ReadLines("c:/temp/ESMDLOG.csv"); 

foreach (string line in lines) 
{ 
    if (line.Contains(searchItem)) 
    { 
     Console.WriteLine(line); 
    } 
} 
संबंधित मुद्दे