16
16. ファイルをN分割する
自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ.
16.hs
import System.Environment import Control.Monad main = do args <- getArgs let num = (read :: String -> Int) $ head args let filename = args !! 1 body <- getContents let l = lines body let a = div (length l) num + mod (length l) num let b = splitAt' a l mapM_ (\x -> writeFile (filename ++ (show x) ++ ".txt") $ unlines (b !! (x - 1))) [1..num] splitAt' n xs | length xs <= n = [xs] | otherwise = x :(splitAt' n y) where (x, y) = splitAt n xs
結構、プログラムが長くて、読みにくくなってしまった。行をn個に分割する関数を定義したら、良かったかもしれない。