2010-02-23 8 views
5

LINQ를 사용하면 탭으로 구분 된 .txt 파일에서 각 문자열을 가져 오는 효과적인 방법은 무엇입니까 (각 단어를 가져오고, 보통 string.Split (...)은 무엇을합니까?).Linq 및 streamreader가 줄을 가져옴

var v = from line in File.ReadAllLines() 
    select n 

내가 믿는 해결책 중 일부입니다. 이것이 항복 수익을 사용한다면 괜찮습니다.

EDIT : 내가 뭘 하려는지 정확히 묘사 한 스레드도 여기에서 보았지만 찾을 수는 없습니다.

답변

7

내가 완전히 확실하지 않다 당신이 묻고있는 것이지만 그것은 탭으로 구분 된 파일에서 모든 단어를 IEnumerable<string>으로 얻으려고하는 것처럼 들립니다. 그렇다면 다음을 시도하십시오.

var query = File.ReadAllLines(somePathVariable) 
       .SelectMany(x => x.Split(new char[] { '\t' }); 
+0

+1 훌륭한 답변과 람다 식 사용 –

+0

그게 내가 찾고있는 것입니다. 내 글을 잘 표현하지 못해 사과드립니다. 문제를 가장 잘 설명하는 방법을 잘 모릅니다. 문자열 행의 모든 ​​단어를 반환하는 yield return을 어떻게 결합 할 수 있습니까? – dotnetdev

+0

마지막 줄을 제외한 모든 부분에서이 작업을 쉽게 수행 할 수 있습니까? – Andy

0

File.ReadAllLines를 사용하는 것은 쉽지만 메모리로 전체 행을 읽으므로 가장 효율적일 필요는 없습니다.

짧은 버전은 아마도 다음과 같습니다 당신은 단어 하나 열거를 원하는 경우

var wordsPerLine = from line in File.ReadAllLines(filename) 
       select string.Split(line, '\t'); 

foreach(var line in wordsPerLine) 
{ 
    foreach(word in line) 
    { 
     // process word... 
    } 
} 

, 당신도 그것을 얻을 SelectMany를 사용할 수 있습니다 ...

+0

분명히 최단 버전이 아닙니다. 쿼리 연산자가 너무 장황하다.)'File.ReadAllLines ("file.txt") Select (line => line.Split ('\ t'))' –

+0

그래, OP는 쿼리 연산자를 사용하여 좋아한다. . –

+0

크기가 50MB 인 탭으로 구분 된 파일에서 데이터를 추출해야하는 상황이 발생했을 때 이것이 최선의 방법일까요? –

관련 문제