Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

再起でファイル読み込み

まああんまり見ないようなのでメモ。
1行ごとに何かやるときって普通はreadFileでlinesにmapとかでやいのやいのやるっぽいんだけど
低レベルのAPI使う例が少なかったので書いてみた。
ファイルの頭から10行取り出すheadの別バージョン。

import System.Environment
import IO

fhead n f = bracket(openFile f ReadMode)
            hClose
            (\h -> do hSetBuffering h LineBuffering
                          take_line 0 h)
            where take_line i h' |i == n = return()
                                      |otherwise = do eof <- hIsEOF h'
                                                       if eof then return() else
                                                          do str <- hGetLine h'
                                                              putStrLn str
                                                              take_line (i+1) h'

main = do args <- getArgs
          fhead 10 $ head args

なげーよ!バカヤロー!
とりあえずHandleに対しても操作できますよと。
まあ滅多に使わないだろうなあ。
あとbracketはtry-finallyみたいもんですよと。