【发布时间】:2016-10-21 05:28:30
【问题描述】:
我想知道如何将放置在某行之后的模式移动到规则的另一个位置。
考虑下面的例子,
rule tmap {
hideON
student_analysis Sam -expr "marks(Sam)" -gt 0
hideOFF
-Designate [ School = "ABC]
-Designate [ Name = "Sam" ]
-Designate [ Country= "ABC]
-Designate [ State = "Sam"]
-Designate [ ROLL Number= "Sam"]
}
其中 hideOFF 需要从 student_analysis 移动到结束大括号之前。输出文件应该有类似
rule tmap {
hideON
student_analysis Sam -expr "marks(Sam)" -gt 0
-Designate [ School = "ABC]
-Designate [ Name = "Sam" ]
-Designate [ Country= "ABC]
-Designate [ State = "Sam"]
-Designate [ ROLL Number= "Sam"]
hideOFF
}
仅添加这些 -Designate 条目可能位于单行中,因此行数不应成为标准。我的输入文件可能像
rule tmap {
hideON
student_analysis Sam -expr "marks(Sam)" -gt 0
hideOff
-Designate [ School = "ABC] -Designate [ Name = "Sam" ] -Designate [ Country= "ABC] -Designate [ State = "Sam"] -Designate [ ROLL Number= "Sam"]
}
如果您需要更多说明,请告诉我。
基于 Peters 帮助的最终解决方案
#!/usr/bin/tclsh
set fileData [lindex $argv 0 ]
set fp [open $fileData r]
set data [read $fp]
set lines [split [string trim $data] \n]
set hideoff {}
foreach line $lines {
if {[regexp {^\s*hideoff\s*} $line match ] == 1 } {
set hideoff $line
} elseif {[regexp {^\s*\}\s*} $line match ] == 1 } {
puts $hideoff
puts $line
} else {
puts $line
}
}
感谢大家提出这么好的建议。
【问题讨论】:
-
你有没有尝试解决这个问题,你在哪里失败了?
-
我还没有为它编写任何代码。只是想知道是否有人以前遇到过这样的事情。
-
@DiveshRastogi:你至少应该尝试。 Stack Overflow 是 帮助 的来源,而不是免费完成工作的地方。