34 lines
		
	
	
		
			1006 B
		
	
	
	
		
			Haskell
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1006 B
		
	
	
	
		
			Haskell
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 |