perl同时写入两个文件_perl脚本读写文件操作

今天想试试用perl脚本来帮我写一点简单的程序片段,发现perl跟tcl很像,非常简单易学,从安装,看说明文档到搞定我的需求十来分钟就完事了233

想做的事情是把下面的代码片段拓展成46份,编号按顺序顺延下去。当然要完成在状态机里变着取数的操作其实完全不需要用死写代码的笨办法,直接搞个计数器就行,但我只是想给自己一个理由学下perl,所以干就完事了。

ASSIGNMENT_1:
begin
	a <= 64'h7FF0000000000000;
	b <= 64'h3FF0000000000000;
end

a和b是存在两个txt里的数据,我要让脚本帮我从txt中读取数据,然后自动写赋值语句,那么首先要完成读取操作,代码如下,所做的是把

open (RFILE_a,"a_input.txt") || die "cannot open file:$!n";
my @array_a = <RFILE_a>;
#print "@arrayn";
#//chomp数组不是这么用的
#for $i (@array_a) {
#    chomp @array_a[$i];
#};
chomp(@array_a);
close RFILE_a;

用上print "@arrayn"这一句后,测试的效果是下面这样。

7d15c4eb7e06133cbd4d743463eb8839.png

特别值得一提的是chomp这个函数,可以自动把数组里每个元素最后的换行符去掉,很方便。

接下来是要把需要按顺序变化的变量做成一个数组,代码如下

array_num = (1..45);
@change_array_num = (3..47);
#//构造ASSIGNMENT数组
$assignment = "ASSIGNMENT_";
for ($i = 1;$i <=45;$i++){
    $assignment_num[$i] =  $assignment.$i;
};
#print "@assignment_num";

最后是写上生成赋值语句的代码

open (WFILE,">>output.txt") || die "cannot open file:$!n";
print WFILE "nnn";
for ($i = 1;$i <=45;$i++) {
	print WFILE "@assignment_num[$i]:nbeginna <= 64'h@array_a[$i];nb <= 64'h@array_b[$i];nendn";
	#print WFILE "if( ini_wait_one_sec ==  CYCLE_ONE_SEC - 1) beginn";
	#print WFILE "state_ini <= @assignment_num[$i+1];n";
	#print WFILE "end else beginn";
	#print WFILE "state_ini <= @assignment_num[$i];nendnendn";
};
close WFILE;

唯一要提一下的是open函数里面的> 和>>的区别,>是清除这个文本里原有的内容再写入,>>是在原有的文本内容后面写入。

另外值得一提的是for $i (@array_a)这种循环表达,这样的表达$i这个变量里存的是(@array_a)这个数组里的每一个元素,所以如果我们要让$i是变化的数字,那么还是老老实实用for ($i = 1;$i <=45;$i++) 。下面是用代码测一下$i的内容。

#//测试一下for $i 里的$i是数字还是元素,答案是元素
#for $i (@array_a) {
#	print "$i";
#};

这么一通简单的操作之后,就可以在我们生成的output.txt里面看到我们要的代码

0c072838f04c74becd2f3aac9bee4c64.png

还用perl做了点别的,这里记录一下方便以后自己翻。

open (RFILE_a,"a_input.txt") || die "cannot open file:$!n";
my @array_a = <RFILE_a>;
#print "@arrayn";
#//chomp数组不是这么用的
#for $i (@array_a) {
#    chomp @array_a[$i];
#};
chomp(@array_a);
close RFILE_a;

open (RFILE_b,"b_input.txt") || die "cannot open file:$!n";
my @array_b = <RFILE_b>;
#print "@arrayn";
chomp(@array_b);
close RFILE_b;

@array_num = (1..45);
@change_array_num = (3..47);
#//构造ASSIGNMENT数组
$assignment = "ASSIGNMENT_";
for ($i = 1;$i <=45;$i++){
    $assignment_num[$i] =  $assignment.$i;
};
#print "@assignment_num";

#生成localparam
open (WFILE,">output.txt") || die "cannot open file:$!n";
for ($i = 1;$i <=45;$i++) {
	#print WFILE "localparam		ASSIGNMEMT_@array_num[$i]=($i+2)n";
	print WFILE "localparam	    @assignment_num[$i]=@change_array_num[$i-1];n";

};
close WFILE;

#//测试一下for $i 里的$i是数字还是元素,答案是元素
#for $i (@array_a) {
#	print "$i";
#};

#//生成赋值
open (WFILE,">>output.txt") || die "cannot open file:$!n";
print WFILE "nnn";
for ($i = 1;$i <=45;$i++) {
	print WFILE "@assignment_num[$i]:nbeginna <= 64'h@array_a[$i];nb <= 64'h@array_b[$i];nendn";
	#print WFILE "if( ini_wait_one_sec ==  CYCLE_ONE_SEC - 1) beginn";
	#print WFILE "state_ini <= @assignment_num[$i+1];n";
	#print WFILE "end else beginn";
	#print WFILE "state_ini <= @assignment_num[$i];nendnendn";
};
close WFILE;
#//调整计数器和状态机状态
open (WFILE,">>output.txt") || die "cannot open file:$!n";
print WFILE "nnn";
for ($i = 1;$i <=45;$i++) {
	#print WFILE "else if (state_ini == @assignment_num[$i] && ini_wait_one_sec == CYCLE_ONE_SEC - 1)nini_wait_one_sec <= 32'd0;n";
	print WFILE "else if (state_ini == @assignment_num[$i] && ini_wait_one_sec == CYCLE_ONE_SEC - 1) beginn";
	print WFILE "ini_wait_one_sec <= 32'd0;n";
	print WFILE "state_ini <= @assignment_num[$i+1];n";
	print WFILE "endn";
};
close WFILE;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值