【发布时间】:2016-02-25 18:52:12
【问题描述】:
我要解析的文件是这样的
Name : John
Pin : 5400
Age : 40
Place: Korea
Amount : 4000
Name : Peter
Pin : 6700
Age : 10
Place : Japan
Amount : 3600
我的 tcl 代码是
set start "Name"
set pn "Pin"
set ag "Age"
set ag_cutoff 15
set amnt "Amount"
foreach line [split $content "\n"] {
if {[regexp $start $line]} {
set count 1
set l1 $line
}
if {[regexp $pn $line] && $count ==1} {
set pin_val [lindex $line 2]
set l2 $line
}
if {[regexp $ag $line] && $count ==1} {
set ag [lindex $line 2]
if { $ag > $ag_cutoff} {
set rep_taken 1
set l3 $line
}
if {[regexp $amnt $line] && $count ==1 && $rep_taken == 1} {
set age_val [lindex $line 2]
puts $op1 "$ag $age_val "
puts $op2 "$l1\n$l2\n$l3\n"
}
此代码适用于绘图。
但是,我也想在 $ag>$ag_cutoff. 现在用 puts $op3 "$l1\n$l2\n$l3\n" ---> 能够打印到文件。但是如何打印未评估的行位置。有更好的方法来实现这一点。
姓名:约翰 引脚:5400 年龄:40 地点:韩国 金额:4000【问题讨论】:
-
那么,
Name :行标志着每条记录的开始? -
是的,它以 Amount 结尾。
-
能够打印行但不完整的设置由 puts $op2 "$l1\n$l2\n$l3\n"。但仍然无法打印全套,包括地点:韩国
-
您需要在 Place 和 : 之间留一个空格来输出韩国。
-
@PeterLewerin 不明白你的意思。我的疑问是如何打印未在集合中评估的行。我应该为 Place 或任何其他行做虚拟正则表达式吗?
标签: tcl