+ -
当前位置:首页 → 问答吧 → 求助,如何在两个文件之间进行替换?

求助,如何在两个文件之间进行替换?

时间:2010-10-05

来源:互联网

举例说,现有两个文本文件: 1.txt和test.txt

1.txt里面是:






test.txt里面是:
ers=7.00

我想做的是把test里面的7分别替换为1.txt里的数字,然后依次追加存储到另一个名为out.txt的文件里,也就是生成:
ers=4.00
ers=6.00
ers=8.00
ers=9.00
ers=5.00

我写的代码如下:
  1. #!/usr/bin/perl -w
  2. use strict;

  3. my $a="1.txt";
  4. my $b="test.txt";
  5. open IN1, $a or die "can't open $a";
  6. open IN2, $b or die "can't open $b";
  7. open OUT, '>>', "out.txt" or die "can't open out.txt";

  8. while (my $line=<IN1>){      

  9.       while (<IN2>){            
  10.              chomp($line);
  11.              s/7/$line/g;               
  12.             print OUT "$_\n";
  13.             print "$_\n" ;                       
  14.      }
  15. }
  16. close IN1;
  17. close IN2;
  18. close OUT;
复制代码
结果出来后out.txt里却只有一条: ers=4.00
冒似里面的while循环只进行了第一次,这是为什么呢?刚刚接触perl,请指教。。。谢谢!

作者: lena_tum   发布时间: 2010-10-05

问题在句柄IN2上
在第一次while(<IN2>)循环完成后,
IN2的内容已经读取完了,它的文件指针指向了test.txt的结尾
所以从第二次开始while(<IN2>)已经读取不了任何东西了

如果想要按照你的思路来做
需要用seek函数重新指定文件指针
  1. #!/usr/bin/perl -w
  2. use strict;

  3. my $a="1.txt";
  4. my $b="test.txt";
  5. open IN1, $a or die "can't open $a";
  6. open IN2, $b or die "can't open $b";
  7. open OUT, '>>', "out.txt" or die "can't open out.txt";

  8. while (my $line=<IN1>){      
  9.     seek IN2,0,0;
  10.     while (<IN2>){            
  11.         chomp($line);
  12.         s/7/$line/g;               
  13.         print OUT "$_\n";
  14.         print "$_\n" ;                       
  15.     }
  16. }
  17. close IN1;
  18. close IN2;
  19. close OUT;
复制代码

作者: 珞水的大叔   发布时间: 2010-10-05

回复 珞水的大叔


果然!!!太太太感谢了!!!

作者: lena_tum   发布时间: 2010-10-05

回复 lena_tum


   

作者: 珞水的大叔   发布时间: 2010-10-05