Haskell でそのような入力ファイルを対応する型にキャストする高速な方法はありますか? たとえば、文字列を受け取り、Int
s のリストを生成する関数は? または、文字列を使用して手動で解析する必要がありgetLine
ますか?
10.
10.
[4, 3, 2, 1].
[(5,8,'~'), (6,4,'*'), (7,10,'~'), (8,2,'o')].
[4,0,9,4,7,5,7,4,6,4].
[4,10,0,6,6,5,6,5,6,2].
はい、read
機能です。
readFile
たとえば、ファイルを読み込んだら、各行で必要なread
タイプに変換できます。ただし、最初に生理を取り除く必要があります。たとえば、次のようになります。
main = do
text <- readFile "test.txt"
let cases = lines text
-- to get rid of the periods at the end of each line
strs = map init cases
lastLine = read $ last strs
print $ show (map (+5) lastLine)
これはサンプル ファイルを取得Int
し、最後の行から s のリストを読み取り、リスト全体に 5 を追加して出力します。
すべての行が同じタイプである場合、すべての行を取得するだけmap read
ですべての行を取得できます。あなたの例のように、さまざまなタイプがある場合は、各行にあるタイプを把握するためにいくつかのロジックを入れてから、そのタイプを処理するために適切な関数を呼び出す必要があります。
Jeff Burka の回答に基づいて構築するために、特定のファイルに使用する特定のコードを次に示します。
main = do
[l1, l2, l3, l4, l5, l6] <- fmap (map init . lines) $ readFile "myFile.txt"
let myVal :: (Int, Int, [Int], [(Int, Int, Char)], [Int], [Int])
myVal = (read l1, read l2, read l3, read l4, read l5, read l6)
print myVal
これにより、解析されたタプルが出力されます。
部分は、init
各行の終わりにある末尾のピリオドを取り除くことです。