用perl实现文件覆盖问题?

dina656 2012-03-30 07:39:27
我想要大体功能是这样的 有一个原始文件1.txt 里面内容全是 xxxx=xxxx这样的变量定义 然后我重新做了一份2.txt里面是根据1.txt中的某些变量做一些重新定义,还有一些新定义的变量这样。 然后现在我想要用perl脚本将2.txt中的变量定义覆盖到1.txt里面,1.txt里原有的变量就覆盖,没有的就追加在后面,这么个功能应该怎么写? 最近刚学perl,有高手来指导下嘛
...全文
250 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dina656 2012-03-31
  • 打赏
  • 举报
回复
问题已然解决了,谢谢上面那位兄弟的解答,结贴!
I_NBFA 2012-03-31
  • 打赏
  • 举报
回复
最后一句是close(FH_RES)
I_NBFA 2012-03-31
  • 打赏
  • 举报
回复

use v5.12;

@ARGV = qw( 1.txt 2.txt 3.txt );
#自己改成命令行吧,第一个是旧文件,第二个是新文件,第三个是结果存哪
my $res_file = pop(@ARGV);
my (%res, @keys);
my ($k, $v);
while(<>){
chomp();
($k, $v) = split(/\s*=\s*/, $_);
push(@keys, $k) unless(exists($res{$k}));
$res{$k} = $v;
}
open(FH_RES, '>', $res_file) or die("$!\n");
print(FH_RES "$_=$res{$_}\n") foreach(@keys);
close(FH_OLD);

至于注释的问题,找特征吧,你根据啥覆盖?
dina656 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

想省事就这样,比如
1.txt内容:
name=JiK
old=120
address=Earth
1.txt内容:
old=120
address=Zentraedi
height=11.7

下面代码就合并了:
Perl code

use v5.12;

open(FH_OLD, "1.txt") or die("$!\n");
open(FH_NEW, "2.tx……
[/Quote]
谢谢你的解答,我还有两个问题,一是我想1.txt中的元素顺序跟原先一样,不要有变化。二是如果1.txt有一些文本不是xxxx=xxxx这样的,还有一些# xxxxx注释之类的文本,这样改如何达到覆盖的要求?
I_NBFA 2012-03-30
  • 打赏
  • 举报
回复
2.txt内容
old=120
address=Zentraedi
height=11.7
I_NBFA 2012-03-30
  • 打赏
  • 举报
回复
想省事就这样,比如
1.txt内容:
name=JiK
old=120
address=Earth
1.txt内容:
old=120
address=Zentraedi
height=11.7

下面代码就合并了:

use v5.12;

open(FH_OLD, "1.txt") or die("$!\n");
open(FH_NEW, "2.txt") or die("$!\n");
$/=undef;
my %old = split(/\s*=\s*|\n/, <FH_OLD>);
close(FH_OLD);
my %new = split(/\s*=\s*|\n/, <FH_NEW>);
close(FH_NEW);
my %res = (%old, %new);
open(FH_OLD, '>', "1.txt") or die("$!\n");
my ($k, $v);
print(FH_OLD "$k=$v\n") while(($k, $v) = each(%res));
close(FH_OLD);

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧