2011-04-06 6 views
4

배열로 읽으려는 파일이 있습니다.LINQ로 텍스트 파일 읽기

string[] allLines = File.ReadAllLines(@"path to file"); 

배열을 반복하고 패턴이 포함 된 각 줄을 찾고 줄 번호와 줄 자체를 표시 할 수 있음을 알고 있습니다.

내 질문은 :

는 LINQ와 같은 일을 할 수 있습니까?

답변

9

음 예 - 인덱스는 우리가 선 자체뿐만 아니라 줄 번호를 포함하는 익명 형식에 투사하여이 작업을 수행 할 수 있습니다 걸리는 Select() 오버로드를 사용하여 :

var targetLines = File.ReadAllLines(@"foo.txt") 
         .Select((x, i) => new { Line = x, LineNumber = i }) 
         .Where(x => x.Line.Contains("pattern")) 
         .ToList(); 

foreach (var line in targetLines) 
{ 
    Console.WriteLine("{0} : {1}", line.LineNumber, line.Line); 
} 

콘솔 출력은 부작용이므로 LINQ 쿼리 자체와 분리되어 있어야합니다.

+0

Bravo !! 일종의 익명 형식을 사용할 수있는 무언가가 포함될 것이라고 생각했습니다. 단지 두 개를 조합 할 수 없었습니다. – coson

-1

이 같은 작업을해야합니다

var result = from line in File.ReadAllLines(@"path") 
      where line.Substring(0,1) == "a" // put your criteria here 
      select line 
0

LINQ를 사용할 수 있습니다. 그러나 줄 번호도 필요하기 때문에 코드를 반복하여 읽을 수 있습니다.

const string pattern = "foo"; 
    for (int lineNumber = 1; lineNumber <= allLines.Length; lineNumber++) 
    { 
     if (allLines[lineNumber-1].Contains(pattern)) 
     { 
      Console.WriteLine("{0}. {1}", lineNumber, allLines[i]); 
     } 
    }