2013-08-01 3 views
-1

파일이 있고 모든 라인을 읽었습니다 List lines = File.ReadAllLines (path) .ToList();linq를 사용하여 목록 필터링

Remove lines here 
... 
BEGIN READ 
X 
Y 
Z 
END READ 
more lines to remove 
... 

나는 "READ를 BEGIN"와 "END 읽기"그 트리거를 포함하지 않는 사이의 섹션을 유지하려면 : 목록은 다음과 같이한다. 어떻게 그 줄을 걸러 낼 수 있습니까?

+2

* 코드를 요청하는 질문은 해결 된 문제에 대해 최소한의 이해를 보여 주어야합니다. 시도한 솔루션, 작동하지 않는 이유 및 예상 결과 포함 * – I4V

+0

루프를 시도했으며 "BEGIN READ"를 실행하면 부울을 true로 설정하고 "END READ"를 히트하면 해당 부울을 false로 설정합니다 . 하지만 난 더 많은 관심을 linq 함수를 사용하여이 작업을 시도 같은 "어디서 및 선택" – Chris

답변

2
var lines = File.ReadLines(fname) 
       .SkipWhile(line => line != "BEGIN READ") 
       .TakeWhile(line => line != "END READ") 
       .Skip(1) 
       .ToList(); 
4

당신은 Enumerable.SkipWhileTakeWhile이 처리하는 데 사용할 수 있습니다

var linesOfInterest = lines 
         .SkipWhile(l => l != "BEGIN READ") 
         .Skip(1) 
         .TakeWhile(l => l != "END READ"); 

이 두 태그 사이의 라인을 반환합니다. Skip(1)을 추가하면 실제 "BEGIN READ" 행을 건너 뛸 수 있습니다.

관련 문제