资源描述:
《集算器文本处理之不定行日志解析.pdf》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、集算器文本处理之不定行日志解析在将日志文本解析成结构化数据时时,常会遇到记录由数量不定的多行组成的情况。这种变换存在一定的复杂性,实现复杂度较高。集算器支持正则表达式、字串拆分、隔行取数、横向拼接等灵活的结构化计算函数,适合处理此类文本。下面通过例子来看一下具体作法。日志文件reportXXX.log存储着若干记录,每条记录由多行构成,包括14个数据项(字段)。记录以字符串“ObjectType”开头。我们的目标是把该日志整理为结构化数据,并将结果写入文本文件。部分源数据如下:WindowReportfor"aaa"Obj
2、ectType:SymbolLocation:left:195top:11right:123bottom:15LineColor:RGB(100)FillColor:RGB(2512550)Link:l11Type:PushButton-ActionScript1ConditionType:OnLeftClick/KeyDownStatement:CallAufrufSchalter1(VEA_450P01.Name,SchalterH-0-A);Link:l12Type:Disable-DiscreteExpressio
3、n1DisabledWhenExpressionisFALSEObjectType:PloygonLocation:left:295top:26right:200bottom:20LineColor:RGB(200)FillColor:RGB(229229229)Link:l21Type:PushButton-ActionScript2集算器代码:A1=file("e:\reportXXX.log").read()2=A1.array("ObjectType:").to(2,)3=A2.regex("(.+)[\s\
4、S]+left:(.+)[\s\S]+top:(.+)[\s\S]+right:(.+)bottom:(.+)[\s\S]+LineColor:\t\t(.+)[\s\S]+FillColor:\t\t(.+)[\S\s]+?Link:(.+)[\s\S]+?Type:(.+)[\s\S]+ConditionType:(.+)[\s\S]+Statement:\r\t+(.+)[\s\S]+Link:(.+)[\s\S]+Type:(.+)\r\r\
5、r\t([\S]+)";objectType,left,top,right,bottom,lineColor,fillColor,ojbectLink,type,conditionType,statement,statementLink,statementType,lastExpress)4=file("e:\result.txt").export@t(A3)A1=file("e:\reportXXX.log").read()这句代码用来将日志文件全部读入内存,结算结果如下:A2=A1.array("Obj
6、ectType:").to(2,)这句代码可以分解为两部分。第一部分:将A1按照”ObjectType”分割为多个字符串,代码为A1.array("ObjectType:"),计算结果如下:第一条数据无用,之后的每条数据都是一条有效记录,to(2,)表示取出第二条直至最后一条数据。A2的计算结果如下:A3=regex(正则表达式;字段名列表),这句代码对A3中的每个成员应用同样的正则表达式,并取出14个字段,字段名以逗号分割。下面列出计算结果中的前几个字段:A4=file("e:\result.txt").export@
7、t(A3)上面的代码用来将计算结果写入文件,默认的分割符是tab,选项@t表示将字段名做为文件的第一行。打开result.txt,可以看到下面的数据:objectTypelefttoprightbottomlineColorfillColorojbectLinktypeconditionTypestatementstatementLinkstatementTypelastExpressSymbol1951112315RGB(100)RGB(2512550)l11PushButton-ActionScript1OnLeftC
8、lick/KeyDownCallAufrufSchalter1(VEA_450P01.Name,SchalterH-0-A);l12Disable-DiscreteExpression1DisabledWhenExpressionisFALSEPloygon2952620020RGB(200)RGB(2