2010-02-02 2 views
1
var t1 = from line in File.ReadAllLines(@"alkahf.txt") 
        let item = line.Split(new string[] {". "}, StringSplitOptions.RemoveEmptyEntries) 
        let verse = line.Split(new string[] { "\n. " }, StringSplitOptions.RemoveEmptyEntries) 
        select new 
        { 
         Index = item, 
         Text = verse 
        }; 

위 코드에 문제가있어 제대로 구문 분석하는 방법이 확실하지 않습니다.linq to txt를 사용하여 행을 구문 분석하십시오.

파일의 형식과 같이이다

, 나는 또한 LINQ 부분에서 어떤 이유로

1. This is text it might have numbers 

2. I skipped a line 

답변

2

작동하지 않는 빈 줄 StringSplitOptions.RemoveEmptyEntries을 무시하고 싶은, 당신은 하나의 내부 있습니다 라인이 비어있는 첫 번째 라인을 제외 할 수 있도록 :

from line in File.ReadAllLines(@"alkahf.txt") 
where !string.IsNullOrEmpty(line) 

당신은 두 개의 분할을 - (우리는 우리가 라인을 읽고 알고 있기 때문에, 그 없을 것이기 때문에) 홀수 인 줄 바꿈 하나 .

let parts = line.Split('.') 
where parts.Length == 2 
select new { 
    Index = parts[0], 
    Text = parts[1] 
}; 

: 난 당신이 뭔가를 의미 기대 ?

또한 ReadAllLines은 버퍼링 된 작업입니다. (한 번에 전체 파일을로드하지 않습니다) 버퍼링되지

public static IEnumerable<string> ReadLines(string path) { 
    using(var reader = File.OpenText(path)) { 
     string line; 
     while((line = reader.ReadLine()) != null) { 
      yield return line; 
     } 
    } 
} 

: 당신이 진정한 스트리밍을 원한다면, 당신은 같은 것을 할 수 있습니다. 첫 번째 줄을 다음으로 변경하십시오.

from line in ReadLines(@"alkahf.txt") 
+0

빠른 응답을 보내 주셔서 감사합니다.하지만 길이를 확인할 때 시퀀스에 2 자리 이상의 숫자가 추가되면 색인이 해제됩니다. 예를 들면 178입니다. 두 자리 숫자 – Ayo

+0

@Ayo을 추가했습니다. 그런 다음 질문에서 샘플 입력과 원하는 출력을 분명히합니다. –

+0

toshay,하지만 역동적 인 솔루션을 만들려고하고 있는데, 거기에 문자열을 데이터 형식을 기반으로 분할하는 방법은 무엇입니까? 나는 정규식을 보았다. 그러나 나의 목적을위한 그것의 너무 많은 복잡한 해결책. – Ayo

0

감사합니다. Marc's answer 덕분에 문제가 해결되었습니다. 늦은 답변을 드려 죄송합니다. 개인 프로젝트로이 작업을하고 있습니다.

코드는 너무

var t1 = from line in StreamReaderExtension.ReadLinesFromFile(@"alkahf.txt") 
      let parts = line.Split(new string[]{". "}, 
       StringSplitOptions.RemoveEmptyEntries) 
      where !string.IsNullOrEmpty(line)      
       && int.Parse(parts[0].ToString()).ToString() != "" 
      select new 
      { 
       Index = parts[0], 
       Text = parts[1] 
      }; 

INT 구문 분석 또한 당신이 그것을 그것은 업을 선택합니다 경우에 플래그를 설정하는 것이 좋습니다이 코드를 사용하는 경우 입력이 정수를 반환해야한다처럼 정수가 아니거나 눈에 띄지 않게됩니다.

관련 문제