トップ «前の日記(2005-06-04) 最新 次の日記(2005-06-07)» 編集

人徳ゼロ日記


2005-06-05

_ Haskellで行番号付与テキストフィルタ

HaskellでちょっとしたI/Oを伴うプログラムを書いてみました。標準入力からテキストを入力し、行番号を行の先頭につけて、標準出力に書きます。コマンドライン引数に行番号の桁数を指定します。

module Main where
import Numeric
import System
main = do
         [numStr] <- getArgs
         input <- getContents
	 putStr (unlines (addLineNum (lines input)
                                     (read numStr)
                                     0))
addLineNum :: [String] -> Int -> Int -> [String]
addLineNum [] _ _ = []
addLineNum (l:ls) numSize num =
          ( (right numSize (show num)) ++ ": " ++ l ) :
          addLineNum ls numSize (num + 1)
right :: Int -> String -> String
right _ [] = []
right s list = let l = s - (length list)
               in
                   if 0 <= l then  (replicate l ' ') ++ list
                   else            drop (- l) list
こんな程度しかまだ作れません。結構時間かかっちゃったな。