2017-12-04 8 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() 

:ここに私のコードですリスト、2行目は別のリストとしてファイルの終わりまで表示されます。誰かがこれを経験したことを感謝します。ありがとう。

+1

私はあなたが初心者だと思っています。あなたがもう少しハズケルを知っていると、将来のための1つのチップです。この演習を再訪し、二重値のリストをリストするのではなく、パーサーを実装してください。 – 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() 

他にも役立つことを願っています。ありがとう、歓声!

関連する問題