【发布时间】:2017-03-09 18:15:40
【问题描述】:
我需要解析一个巨大的日志文件。我想在 Haskell 中做这件事是为了学习(我是初学者)。 日志文件的布局类似于:
parameter a_parameter_name errors: 5
error bla bla1
error bla bla2
error bla bla bla3
error bla bla bla4
error bla bla bla5
some garbage line
parameter an_other_parameter_name errors: 7
error bla bla1
error bla bla2
error bla bla3
error bla bla4
error bla bla5
error bla bla6
error bla bla7
some garbage line
some garbage line
some garbage line
...
此日志文件包含 2 种主要行类型:
- 以“参数”开头的行;
- 以“error”开头的行。
“错误”行与前一个参数行相关。 其他几行没什么意思。
我想做的是打印出参数及其错误,按错误数排序。所以在这里我想得到:
parameter an_other_parameter_name errors: 7
error bla bla1
error bla bla2
error bla bla3
error bla bla4
error bla bla5
error bla bla6
error bla bla7
parameter a_parameter_name errors: 5
error bla bla1
error bla bla2
error bla bla bla3
error bla bla bla4
error bla bla bla5
通过以下代码,我得到了有趣的行列表
import System.IO
import Data.List
interesting :: String -> Bool
interesting s = isPrefixOf "parameter" s || isPrefixOf "error" s
main = do
logFile <- openFile "log.txt" ReadMode
contents <- hGetContents logFile
let interestingLines = filter interesting $ lines contents
print interestingLines
hClose logFile
从这个列表中,我想构建一个三元组列表: [(parameter, errorsNb, [errors])],我可以排序并打印出来。 但我不知道如何将错误行与其相关的参数行分组。但也许这不是正确的方法...... 欢迎任何帮助!
奥利维尔
【问题讨论】:
标签: haskell