perl在IC领域应用—复制多行通配符替换为数字

Posted IC验证技术圈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl在IC领域应用—复制多行通配符替换为数字相关的知识,希望对你有一定的参考价值。

perl特点

perl非常难以看懂,但是非常好用,对于文字处理,perl考虑的是用起来方便,写的时候有千奇百怪的写法,比较难以阅读,并且perl中很多东西都是用处不大的,使用perl的套路一般都模板化。


最常用模式
1,打开文件,一个循环读取文件
2,查找,找到替换,提取有用的数据等等
3,写入一个新文件中


应用实例

执行说明

脚本功能为将下面的一行中数据拷贝N行,并将通配符$换成0到N的数字,下面的一行数据放在文件temp.txt中

5'd$: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*$+0*2 +: 2];#上面的$是通配符,将$换成数字,复制2400份。

在命令行下执行:perl auto_copy.pl temp.txt  2400   


其中 auto_copy.pl为perl脚本程序文件名,2400为拷贝次数,执行完部分结果如下

5'd$: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*$+0*2 +: 2];#上面的$是通配符,将$换成数字,复制2400份。
5'd0: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*0+0*2 +: 2]; 5'd1: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*1+0*2 +: 2]; 5'd2: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*2+0*2 +: 2]; 5'd3: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*3+0*2 +: 2]; 5'd4: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*4+0*2 +: 2]; 5'd5: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*5+0*2 +: 2]; 5'd6: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*6+0*2 +: 2]; 5'd7: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*7+0*2 +: 2]; 5'd8: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*8+0*2 +: 2]; 5'd9: SHIFT0_INPUT[0 +: 2] = MIN_AND_SIGNMUL_FROM_Cnode[96*9+0*2 +: 2];

程序说明

#!/usr/bin/perl ##开启警告功能use warnings;  ##第一行是解释器的路径,必须得那么写,如果第一行是注释或者其他的话,在执行的时候需要特殊处理##在linux里面写完只是一个文档 ,要想执行必须使用:chmod +x ***.pl 此时文件才能可执行
## stepheng.20150804, auto copy a file many times,and replace $ to number.## Uasge: auto_copy.pl filename xxx num sign## for example: auto_copy.pl temp.txt 2400## then in each line, $ will be replace by a number. First is 0 ,then 1,...... ## this file will copy 2400 times, Untill 2399.
#perl 支持命令行传参数#@array 数组,使用数组中的元素则$array[2] $src_file = $ARGV[0]; #命令行的第一个参数,即temp.txt$times = $ARGV[1]; #命令行第二个参数,即次数2400
#打开文件,文件句柄放在SRCFILE中,perl中使用的变量不声明就可以直接使用的,open(SRCFILE, $src_file) || die ("ERROR:Could not open file $src_file ! \n");
#文件auto_replace_number.txt为最终输出的文件,unlink 如果目录中存在该文件,则删除unlink "auto_replace_number.txt";
#打开一个名为auto_replace_number.txt文件,文件句柄赋给OUTFILE,#">>"表示追加写,即挨着原有内容的末尾写,#“>”表示从开头写,不管文件里面是否有文件,都从开头替换写,open(OUTFILE, ">> auto_replace_number.txt") || die ("ERROR:Could not open file $src_file ! \n");
#无必要声明$num = 0;for ($num=0; $num < $times; $num++){ #屏幕打印提示信息 print "Do the $num th replace....\n";
#执行完关闭,也可以放在for循环的最后 close SRCFILE; open (SRCFILE, $src_file);
#读入一行,while($line = <SRCFILE>)为将文件SRCFILE按行进行读取, #$line的内容就是文件里面的一行 #每循环一次,读取一行,<>保证了每次只读取一行,读到末尾为空,while循环退出 while($line = <SRCFILE>){
#把换行结尾的换行符给去掉,因为$line打印的时候就是以换行结束的,如果不去,就会有两个换行符 chomp($line); $line =~ s/\$/$num/g; #\$就是代表$(\转义字符),g是全局的意思, #全部替换,否则只替换一个,替换完的结果再赋值给$line
#写入的时候是带换行符的, print OUTFILE "$line \n"; } #print OUTFILE "\n";}
#关闭句柄close SRCFILE;close OUTFILE;




以上是关于perl在IC领域应用—复制多行通配符替换为数字的主要内容,如果未能解决你的问题,请参考以下文章

Perl Tk在IC设计中的应用WindowsLinux平台下的安装-各种错误的摸索解决

数字IC设计脚本编程系列——Perl基本概念

Perl 命令行多行替换

如何使用 Perl 搜索和替换多行?

如何在 Perl 中输入多行注释? [复制]

perl 替换文件夹中的多个文件