题目:写一个函数将某类文本中出现“OBS”字符后的再遇到的LAYER信息更改,例如
MACRO XXX
CLASS BLOCK ;
SIZE 200 200 ;
PIN XXX ;
PORT
LAYER ME1 ;
RECT 0 0 100 100 ;
END
OBS
LAYER ME1 ;
RECT 0 0 50 50 ;
END XXX
按照题目更改后的文本应为
MACRO XXX
CLASS BLOCK ;
SIZE 200 200 ;
PIN XXX ;
PORT
LAYER ME1 ;
RECT 0 0 100 100 ;
END
OBS
LAYER ME1 SPACING 0.5 ;
RECT 0 0 50 50 ;
END XXX
注意只能更改第二次出现的LAYER信息。
代码为:
proc add_spaing {file1 file2} {
set file_in [open $file1 r]
set file_out [open $file2 w]
while {[gets $file_in line] != -1} {
if {[regexp "OBS" $line] == 1} {
puts $file_out $line ##不加这句OBS这一行会丢失
while {[gets $file_in line] != -1} {
if {[regexp "LAYER ME1" $line} {
puts $file_out "LAYER ME1 SPACING 0.5"
} else {
puts $file_out $line
}
}
}
}
close $file_out
}
用两次while循环,当满足第一个if条件时也就是遇到OBS字符后遍历剩余的行判断是否符合第二个if条件。调用proc函数的方法:函数名 变量1 变量2 ; 例如 add_spacing file1 file2