我正在尝试编写打开文件的tcl脚本,并找出其中的错误/警告和出现。
例如,在文件中,我有类似的内容:
Severity: Warning Occurrence: 2
或
Severity: Error Occurrence: 2
我想提取这些信息
set fp [ open xx/a.rpt "r" ]
set Error "--"
set Warning "--"
while { [ gets $fp line ] >= 0 } {
if { [ regexp "^# Error" $line ] } {
regsub -all {(\s+)} $line { } temp_err
set Error [ lindex [ split $temp_err " " ] 2 ]
puts $Error
} elseif {
[ regexp "^# Warning" $line ]
}
{
regsub -all {(\s+)} $line { } temp_warn
set Warning [ lindex [ split $temp_warn " " ] 2 ]
puts $Warning
}
};
close $fp
答案 0 :(得分:0)
用于匹配警告:
^Severity:\s+Warning\s+Occurrence:\s+\d+
对于匹配错误:
^Severity:\s+Error\s+Occurrence:\s+\d+
答案 1 :(得分:0)
您似乎从问题中留下了一些细节。 (不好主意;你这样得到的答案都不完整。)从下面你有regsub构造的事实来看,我猜你输入中有一个你想要存储的错误名称。你对Alex的评论说你想要捕获事件的数量。
有一部分正则表达式在使用括号()进行比较时提取信息。根据您在评论中提供的剪辑,构建您的正则表达式:
if { [regexp {^([^:\s]):.+Severity:\s+Error\s+Occurrence:\s+(\d+)} $line match errName count] } {
puts $errName
incr errCount $count
}
围绕[^:\ s] +的第一组括号应该在第一个冒号前收集非空白块,并将其放在变量“errName”中。围绕\ d +的第二组应该收集结束该行的数字并将它们放入变量“count”。
使用括号收集子字段的原则非常强大,并且比您正在执行的regsub / split / lindex处理更有效。