2013-03-21 3 views
10

저는 C#을 처음 사용하며 StreamReader을 사용하기 시작했습니다. 한 번에 한 줄씩 파일을 읽고 "I/RPTGEN"과 같은 특정 키워드와 일치 할 때 줄을 출력하려고합니다.한 번에 한 줄씩 CSV 파일을 읽고 키워드를 구문 분석하는 방법

지금까지 전체 파일을 문자열로 읽는 방법을 알아 냈지만 한 번에 한 줄씩 읽는 방법을 알아 내지 못했습니다.

내 코드는 지금까지입니다.

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/2천13분의 27 오전 12시 0분 44초, I/RPTGEN (cadinterface가), 나/RPTGEN 실패 - 오류 500 - 내부 서버 오류 - (URL에 대한 로그 확인) 보고서 요청에 대해 반환 .

+5

그의 질문은 제목에 있었다 @Tosi "어떻게 CSV는 한 번에 하나 개의 라인을 파일 및 키워드를 분석 읽는 방법"을 참조하십시오. 너무 가혹하지 마십시오. –

답변

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

답변에 대해 모두 고맙습니다. 그것은 내 프로젝트를 끝내는 것에 더 가까이 다가 갈 수있게 해주었습니다. – Steve

+0

날짜 및 일련 번호와 같은 여러 키워드를 검색하는 경우 내 CSV에 Date가 포함 된 키워드가 여러 개있는 경우 어떻게됩니까? 만료 날짜와 날짜를 비교하면 검색 할 키워드를 어떻게 제어 할 수 있습니까? 정말 고맙습니다! –

+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); 
    } 
} 
관련 문제