Perl在IC设计中的运用006_关键字替换

1、采用perl更新文件关键字

New_age.sdc和all_age.sdc中包含人名和对应的年龄,使用new_age.sdc中的年龄更新all_age.sdc中的年龄信息。如xiaoming 年龄需要更新到44,zhangsan年龄更新到28

2、perl脚本如何实现

脚本实现原理如下:

  1. 打开已有的文件new_age.sdc
  2. 逐行匹配,关键字匹配,是否包含name + age,保存为name和new_age。如果包含,打开all_age.sdc,逐行匹配name,如果匹配上,则将new_age替换old_age.否则保持不变。将替换结果保存在line_save里,保存到tmp_file。
  3. 一次内部循环后,将tmp_file move为output
  4. 所有循环完成后输出output

3、perl脚本如何使用

使用命令:perl perl006_keyword_replace.pl -input1  new_age.sdc  -input2  all_age.sdc

原文件: all_age.sdc和new_age.sdc

 

生成的新文件:all_age_replace.sdc

 xiaoming和wanger 年龄替换成功:

#!/usr/bin/perl -w
#use strict ;
my  $input1;
my  $input2;
my  $output;
my  $line ;
my  $line2 ;
my  $name  ;
my  $new_age;
my  $old_age;
my  $tmp_file ='tmp_file';
my  $replace_cnt =0;
my  $line_save  ;

use Getopt::Long ;
Getopt::Long::GetOptions(
   'input1=s' => \$input1 ,
   'input2=s' => \$input2 
);

if($input2 =~/(.*).sdc/){
       $output =$1."_replace.sdc" ;
}else {
  print "The $input2 name is Error, should be name.async.sdc\n";
}

system "cp $input2 $output" ;

open INPUT,'<', $input1 or die "Can't open $input1:$!";

while($line =<INPUT>) {
  chomp $line ;
  if($line =~/(\w*)\s*(\d\d)/){
	$name = $1 ;
        $new_age = $2;
	$line_save ="";
	print $name."\n" ;
	print $new_age."\n";
	open OUTPUT,'<', $output or die "Can't open $output:$!";
        open TMP_OUTPUT,'>', $tmp_file or die "Can't open $tmp_file:$!";
	while ($line2=<OUTPUT>) {
        #chmod $line2;
	   if($line2=~/(\w*)\s*(\d\d)/) {
	      $old_age = $2 ;
              #print "all_file : name : $1\n";
		  if("$name" eq "$1") {
		    $line2 =~ s/$old_age/$new_age/e;
		    #$line_save .=$line2."\n" ;
		    $line_save .=$line2 ;
		    $replace_cnt = $replace_cnt + 1;
                    print "all_file : name : $name\n";
		  }else {
		    #$line_save .=$line2."\n" ;
		    $line_save .=$line2 ;
                  }
	   
	   }else {
	    #$line_save .=$line2."\n" ;
	    $line_save .=$line2;
	   }
	   }
	   print TMP_OUTPUT $line_save ;
	   close TMP_OUTPUT ;
	   close OUTPUT ;
	   #system "chmod 777 $output" ;
	   system "mv $tmp_file $output ";
    }else {next ;}
	
}
  
  print  $replace_cnt ;
  print "\n"."Please to check the new file :$output !! \n" ;

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值