Use Haskell operations instead of system; it's faster!
Cat's Eye Technologies
13 years ago
21 | 21 | run :: [Block] -> String -> Bool -> IO () |
22 | 22 | |
23 | 23 | run blocks resultsFilename messy = do |
24 | system ("echo -n \"\" >" ++ resultsFilename) | |
24 | r <- openFile resultsFilename WriteMode | |
25 | hClose r | |
25 | 26 | runBlocks blocks resultsFilename messy |
26 | 27 | cleanRun (not messy) "rm -f input.txt output.txt" |
27 | 28 | |
42 | 43 | writeOutFile filename contents = do |
43 | 44 | outputFileHandle <- openFile filename WriteMode |
44 | 45 | hSetNewlineMode outputFileHandle noNewlineTranslation |
45 | hPutStr outputFileHandle contents | |
46 | newlinify outputFileHandle contents | |
46 | 47 | hClose outputFileHandle |
47 | 48 | |
48 | 49 | execute cmd resultsFilename id = do |
49 | 50 | exitCode <- system (cmd ++ " 2>&1") |
50 | case exitCode of | |
51 | ExitSuccess -> do | |
52 | system ("echo \"output\" >>" ++ resultsFilename) | |
53 | execute' resultsFilename id | |
54 | ExitFailure _ -> do | |
55 | system ("echo \"exception\" >>" ++ resultsFilename) | |
56 | execute' resultsFilename id | |
51 | r <- openFile resultsFilename AppendMode | |
52 | writeExitCode r exitCode | |
53 | hSetNewlineMode r noNewlineTranslation | |
54 | hPutStrLn r (show id) | |
55 | text <- readFile "output.txt" | |
56 | hPutStrLn r $ show $ length $ lines text | |
57 | newlinify r text | |
58 | hClose r | |
59 | return () | |
57 | 60 | |
58 | execute' resultsFilename id = do | |
59 | system ("echo " ++ (show id) ++ " >>" ++ resultsFilename) | |
60 | system ("falderal newlinify output.txt >output2.txt") | |
61 | system ("mv output2.txt output.txt") | |
62 | system ("echo `wc -l output.txt` >>" ++ resultsFilename) | |
63 | system ("cat output.txt >>" ++ resultsFilename) | |
64 | return () | |
61 | writeExitCode handle ExitSuccess = do | |
62 | hPutStrLn handle "output" | |
63 | writeExitCode handle (ExitFailure _) = do | |
64 | hPutStrLn handle "exception" | |
65 | ||
66 | newlinify handle text = do | |
67 | case last text of | |
68 | '\n' -> hPutStr handle text | |
69 | _ -> hPutStrLn handle text |