2017-12-04 18 views
2

안녕 얘들 아,목록의 목록에 텍스트의 하스켈 :: 구문 분석 라인과 같이

내가 텍스트 파일을 구문 분석하고 있습니다 :

114.474998474121 15.7440004348755 25.806999206543 -873 172 182 188 
114.46199798584 15.7419996261597 25.8799991607666 -1396 180 192 205 

을 그리고 다음과 같이 읽을 수 있기를 바랍니다.

[[114.475,15.744,25.807,-873.0,172.0,182.0,188.0], 
[114.462,15.742,25.88,-1396.0,180.0,192.0,205.0]] 

현재이 텍스트 구문 분석을위한 제 코드는 그것을 제공하지 않습니다. 나는이 (텍스트 파일) 전체를 한 줄을하는 방법을 찾을 수 없습니다

[114.475,15.744,25.807,-873.0,172.0,182.0,188.0, 
114.462,15.742,25.88,-1396.0,180.0,192.0,205.0] 

:이 코드는 다음과 같은 하나의 목록으로 모든 텍스트를 구문 분석

main = do 
    text <- readFile "mytext.txt" 
    let 
     pcVal = map read (words text) :: [Float] 
    print pcVal 
    return() 

: 여기 내 코드입니다 목록 및 두 번째 줄은 파일의 끝까지 다른 목록으로 표시됩니다. 누군가이 경험이 있으면 감사하게 생각하십시오. 감사.

+1

나는 당신이 초심자 인 것처럼 생각한다. 이 실습을 다시 읽고 이중 값 목록 만 listing하는 대신 파서를 구현하십시오. – epsilonhalbe

+0

예 @epsilonhalbe, 저는 초보자이며이 언어를 좋아합니다. 나는 당신의 미래에 대한 조언을 구할 것입니다. 감사! –

답변

7

lines 함수를 사용할 수 있습니다. 예 : map words $ lines text.

또한 솔루션으로 라인을 제안하기위한, 즉

let parse :: String -> [Float] 
    parse line = map read $ words line 
    pcVal = map parse $ lines text 
+0

감사합니다. @ 단, String - Char의 일부 버그를 시도했지만 시도하지 않았습니다. 편집 후 조금 작동합니다! 나는 아래에 답변을 게시합니다. –

+1

@SirDK 내가 추가 한 유형 주석이 도움이된다고 생각합니다. – Dan

0

감사 단, 도우미 함수를위한 좋은 시간이 될 것입니다. 내 질문에 잘 작동하는 코드는 다음과 같습니다.

main = do 
    text <- readFile "mytext.txt" 
    let 
     readparse txtLines = map read txtLines :: [Float] 
     parse txtLines = map (words) (lines txtLines) 
     pcval = map readparse (parse text) 
    print pcVal 
    return() 

다른 사람들에게도 도움이되기를 바랍니다. 감사와 환호!