2011-04-26 6 views
1

임에서 항목을F 번호는 F 번호를 배우려고 노력 순서

내가 뭘하고 싶은 것은, 웹 페이지를 다운로드 시퀀스로 분할 한 다음 항목의 인덱스를 찾아서 후 다음 3 개 항목을 가지고있다.

Heres the code - 누군가 제게 잘못하고있는 것을 보여줄 수 있습니까?

let find = "<head>" 
let page = downloadUrl("http://www.stackoverflow.com") 
let lines = seq ( page.Replace("\r", System.String.Empty).Split([|"\n"|], StringSplitOptions.RemoveEmptyEntries) ) 
let pos = lines |> Seq.findIndex(fun a -> a == find) // getting a Exception of type 'System.Collections.Generic.KeyNotFoundException' was thrown. 
let result = // now to get the next 3 items 
printfn "%A" (Seq.toList result);; 

답변

3

그래서 F # 텍스트 처리를하고 있습니다. 다음은 몇 가지 가능한 문제는 다음과 같습니다

  1. 당신이 HTML 페이지를 다운로드 한 후 전처리를하지 않았다, 모든 HTML 태그를 제거 말한다.

  2. page.Replace("\r", System.String.Empty).Split([|"\n"|]은 항목/단어를 분리하려고하기 때문에 문제가있는 것 같습니다. 이 행은 행을 분할합니다.

  3. 변경 ==에서 =으로 변경하십시오. F #에서 =은 비교를위한 불린 연산자입니다.

  4. let result = lines |> Seq.take pos은 처음에만 pos 항목을 취합니다. 이 항목을 건너 뛰고

과 같이 pos 개의 항목을 가져와야합니다.

lines 
|> Seq.skip (pos+1) 
|> Seq.take 3 
+0

고맙게 생각한다 저에게 문제점을 일으키는 원인이 된 점 3 이었다는 것을 생각하십시오 –

2
let result = lines |> Seq.take pos 

이 줄은하지가 후 3 개 항목을 소요, 발견 된 항목 전에 모든 것을 건너 뜁니다.

검색된 항목이없는 경우 EDIT :Seq.findIndex이 실패합니다. 원하는 경우 Seq.tryFindIndex :

match lines |> Seq.tryFindIndex(fun a -> a == find) with 
| Some pos -> let result = // now to get the next 3 items 
       printfn "%A" (Seq.toList result) 
| None  ->() 
+0

고마워요. 그 라인을 정말로 남겨 두었습니까? - 문제의 원인이되는 항목의 색인을 얻고 싶습니다. - –

+0

그냥 혼란 스럽네요. –

+0

감사합니다. - 두 가지 대답의 콤보를 사용합니다. 두 답변을 병합 한 것으로 표시하고 싶습니다. 받아 들여지는 : –