import Control.Monad import System.FilePath(takeExtension, dropExtension, (<.>), ()) import Data.Char(isSpace) import System.Directory(getDirectoryContents) main :: IO () main = do files <- getDirectoryContents "data" forM_ files $ \file -> when (takeExtension file == ".txt") $ do src <- readFile $ "data" file forM_ (zip [1..] (split_file src)) $ \(i, x) -> writeFile ("res" dropExtension file ++ "_m" ++ show i <.> "txt") x split_file :: String -> [String] split_file xs = let as = lines xs bs = map (dropWhile isSpace) as cs = dropWhile null bs (s1, _:rest) = break null cs ds = dropWhile null rest (s2,_:s3) = break null ds in map (tabify . unlines) [s1,s2,s3] tabify xs = case xs of [] -> [] (' ':ys) -> '\t' : tabify (dropWhile (== ' ') ys) (y:ys) -> y : tabify ys