在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 10160|回复: 19

[求助] 如何用perl 改写cdl文件内容?(已解决,感谢二楼大神)

[复制链接]
发表于 2014-11-25 18:32:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 axlrose2138 于 2014-11-26 03:01 编辑

请问各路大侠,小弟现在有一个文本文件,大致如下 (牛人可能一眼就看出来是个 CDL文件),我现在想把里面的 .subckt 的一行在末尾加上 VDD和VSS,其他所有m打头的,末尾都加上 fw,并让这个fw 等于这行w的值,因为这样的.subckt 和 m 很多,手改工作量很大,我打算用perl, 可惜能力有限,实现不出来,请问哪位大侠给指点一下(我后面参考模板,写了不完整的文件,如果大侠觉得我的写的思路正确,麻烦指点如何加几行命令行能实现)。另外应该是设置悬赏功能的,表示感谢,但是不知哪里设,知道的大侠们麻烦说一下,我好加上,谢谢!

.subckt a b c d e f g (此处加上 VDD VSS)
m0 vdd vss l=0.35 w=0.45 (此处加上fw=0.45)
m1 vdd net vss l=0.18 w=0.72 (此处加上fw=0.72)
.end subckt


.subckt b c d e f g h i j k (此处加上 VDD VSS)
m0 vss vdd l=0.11 w=0.4 (此处加上fw=0.4)
m1 net net vdd net vss l=0.2 w=0.5 (此处加上fw=0.5)
.end subckt

.subckt.....
m.........
m.....
.........


-------------------------------------------------------------------------------------以下是我的不完整的code:
#!usr/bin/perl                                                                                            
$read_in ="./test";  #上面文件的名字是test
$write_out ="./test_out"; #实现后保存在新文件叫test_out

open (IN,"<$read_in") or die "can not open the file: $!\n"; #读取文件
@lines=<IN>;          #读取每一行,保存在数组中
close IN;                  #关闭原文件

open (OUT,">$write_out") or die "can not write and save: $!\n"; #存储到新文件下
for (@lines) {

????????????? #这里应该是如何实现,实在不会写
print OUT;        #打印到新文件

      }

#下面是在屏幕中直接打出来,看运行效果,因为?出写不出来,这里也没有输出
close OUT;

open (TEST, "<$write_out") or die "can not open the file: $!\n";
while ( <TEST> ) {
       print;
}

close TEST;
发表于 2014-11-25 22:59:03 | 显示全部楼层
#!/usr/bin/perl

use strict;

open (FH, "> test_out") or die "Can't open output file!";

while (<>) {
  if (/^\.subckt/) {
    chomp;
    $_ .= " VDD VSS";
    print FH "$_\n";
   }
   elsif (/^m.*w=(\S+)/) {
     chomp;
     $_ .= " fw=$1";
     print FH "$_\n";
   }
   else {
     print FH $_;
   }
}
发表于 2014-11-25 23:00:05 | 显示全部楼层
#!/usr/bin/perl

use strict;

open (FH, "> test_out") or die "Can't open output file!";

while (<>) {
  if (/^\.subckt/) {
    chomp;
    $_ .= " VDD VSS";
    print FH "$_\n";
   }
   elsif (/^m.*w=(\S+)/) {
     chomp;
     $_ .= " fw=$1";
     print FH "$_\n";
   }
   else {
     print FH $_;
   }
}
 楼主| 发表于 2014-11-26 02:14:02 | 显示全部楼层
回复 3# irene_cn


    感谢大神回复,我试试,回头说明情况阿
 楼主| 发表于 2014-11-26 02:59:58 | 显示全部楼层
回复 3# irene_cn


    我只能对您说,膜拜阿。。。。。。。。。。。。。。。。。成功了,加上我的文件输入输出,成功完成我需要的要求,唉,人和人的差距太大了,我搞了一天也没搞定,大神只需轻轻拂拂衣袖阿。。。。哈哈,再次感谢!!!

P.S. 有需要的朋友,直接copy 大神的二楼或三楼的代码就可以了。。。。为大神和自己攒点RP阿。。。。
 楼主| 发表于 2014-11-26 06:50:23 | 显示全部楼层
回复 4# axlrose2138

在下面的帖子更新了一下,给大神点赞了阿。。。。
http://bbs.eetop.cn/viewthread.php?tid=469052&page=1&extra=#pid8383356
发表于 2014-11-26 09:10:41 | 显示全部楼层
路过,看来学点perl很重要啊
回复 6# axlrose2138
发表于 2014-11-26 09:13:17 | 显示全部楼层
赞,  赞


回复 3# irene_cn
 楼主| 发表于 2014-11-26 09:40:43 | 显示全部楼层
回复 7# xxmule

握抓,还有SKILL
发表于 2014-11-26 19:37:47 | 显示全部楼层
2楼大神,最后一个打印print还应该和上次处理一样要 print FH "$_/n"; 吧。要不厌就不换行输出了吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 14:06 , Processed in 0.025828 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表