条件を満たす行を取り除く
via http://d.hatena.ne.jp/gan2/20070706/1183708048
‘#’で始まる行を取り除く問題。すげーひさしぶりに Haskell で書いてみる。
module Main where import System f :: String -> Bool f (h:tl) | h == '#' = False | otherwise = True main :: IO () main = do fileName <- getArgs contents <- readFile (head fileName) putStr $ unlines $ filter f $ lines contents
実行。
^o^ >type sample.txt hello! # remove this # don't remove this bye! ^o^ >runhaskell filterline.hs sample.txt hello! # don't remove this bye!
ファイルを1行ずつ処理するやり方を忘れててあせった。
追記:id:jmkさんからもらったアドバイスを追記しておこう。ありがとうございます。
f ('#':_) = False f _ = True
- 元のコードでは空行に対応できてない。
- パターンマッチにはリテラルを使える。
f (’#’:_) = False
f _ = True
の方がいいと思います。これじゃ空行に対応できないし。
ああ!文字リテラルをパターンマッチに使えるんだっけ。忘れてました。おまけに空行のことは頭にありませんでした。