34 lines
		
	
	
		
			1007 B
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1007 B
		
	
	
	
		
			Haskell
		
	
	
	
	
	
| #!/usr/bin/env runhaskell
 | |
| -- simplifyprof.hs somefile.prof
 | |
| -- filter uninteresting fields from GHC profile output
 | |
| -- tested with GHC 6.8
 | |
| -- Simon Michael 2007,2008
 | |
| 
 | |
| import Data.List
 | |
| import System.Environment
 | |
| import Text.Printf
 | |
| 
 | |
| main = do
 | |
|   args <- getArgs 
 | |
|   let f = head args
 | |
|   s <- readFile f
 | |
|   let ls = lines s
 | |
|   let (firstpart, secondpart) = break ("individual    inherited" `isInfixOf`) ls
 | |
|   putStr $ unlines firstpart
 | |
|   let fields = map getfields $ filter (not . null) $ drop 2 secondpart
 | |
|   let maxnamelen = maximum $ map (length . head) fields
 | |
|   let fmt = "%-" ++ show maxnamelen ++ "s %10s %5s %6s %9s %10s"
 | |
|   putStrLn $ showheading fmt
 | |
|   putStr $ unlines $ map (format fmt) fields
 | |
| 
 | |
| getfields s = name:rest
 | |
|     where
 | |
|       space = takeWhile (==' ') s
 | |
|       fields = words s
 | |
|       name = space ++ head fields
 | |
|       rest = drop 3 fields
 | |
| 
 | |
| showheading fmt = format fmt ["cost centre","entries","%time","%alloc","%time-inh","%alloc-inh"]
 | |
| 
 | |
| format fmt (s1:s2:s3:s4:s5:s6:[]) = printf fmt s1 s2 s3 s4 s5 s6
 |