每天一个tcl脚本-第7天

题目:写一个函数将某类文本中出现“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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值