2015-11-06 90 views
0

在自动生成的名为“Summary.txt”的文件中找到模式之前和之后,我想要删除所有行。 1)找到表达式“Summary of Results”之前,删除所有行。 2)找到表达式“结果结束”后删除所有行。在tcl中发现模式之前和之后删除所有行

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
XXXXXXXXXXXXXXXXXX Here are some unwanted lines XXXXXXXXXXXXXXXX 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
Summary of Result 
Line 2: Grammar error 
Line 14: Missing of punctuations "!" 
Line 15: Spelling error 
Line 21: Spelling error 
Line 40: Missing of punctuations "," 

End of Result 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
XXXXXXXXXXXXXXXXXX Here are some unwanted lines XXXXXXXXXXXXXXXX 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

我在TCL是新的。在这里需要一些帮助。 非常感谢。

回答

2

这将使用“fileutil”(来自Tcllib)读取和写入的文件和“正则表达式”,以提取所需的文本:

package require fileutil 
set data [::fileutil::cat Summary.txt] 
if {![regexp "Summary of Result.*End of Result\n" $data result]} { 
    error "Expression not found." 
} 
::fileutil::writeFile Output.txt $result 
1

更面向行的替代

set fid [open Summary.text] 
set in_result false 
while {[gets $fid line] != -1} { 
    if {[string match "*Summary of Result*" $line]} {set in_result true} 
    if {$in_result} {puts $line} 
    if {[string match "*End of Result*" $line]} break 
} 
close $fid 
相关问题