0

我正在尝试比较两个文档 test1、test 2 中的字符串

测试1:

 <p><imagedata rid="rId7"></p>
  ...
 <p><imagedata rid="rId8"></p>

测试2:

<imagesource Id="rId7" Target="image/image1.jpg"/>
...
<imagesource Id="rId9" Target="image/image2.jpg"/>
...
<imagesource Id="rId8" Target="image/image3.jpg"/>

我想要的是,第一个文件应该被替换为图像目标路径,例如:

 <p><imagedata src="image/image1.jpg"></p>
  ...
 <p><imagedata rid="image/image3.jpg"></p>

我试图从两个文件中提取文本,但我坚持比较两个字符串

 opendir(DIR, $filenamenew1);

 our(@test1,@test2);

 open fhr, "$filenamenew1/test1.txt";

 open fhr1, "$filenamenew1/test2.txt";


 my @line;

 @line= <fhr>;

 for (my $i=0;$i<=$#line;$i++)
 {
 if ($line[$i]=~m/rid="(rId[0-9])"/)
 {
 my $k = $1;

 push (@test1, "$k");
 }
 }


 my @file2;

 @file2= <fhr1>;

 for (my $i=0;$i<=$#file2;$i++)
 {
 if ($file2[$i]=~m/Id="(rId[0-9])"/)
 {
 my $k1 = $1;

 push (@test2, "$k1");


 foreach (@test1 = @test2)
 {
 print "equal";
 }

 }

 }
4

1 回答 1

0

一种解决方案可能是首先读取文件,<imagesources>并将 therid和 the保存target在哈希中。之后逐行读取另一个文件并比较rid哈希中是否存在并进行替换,例如:

内容script.pl

#!/usr/bin/env perl

use warnings;
use strict;

my (%hash);

open my $fh2, '<', shift or die;
open my $fh1, '<', shift or die;

while ( <$fh2> ) {
        chomp;
        if ( m/Id="(rId\d+)".*Target="([^"]*)"/i ) {
                $hash{ $1 } = $2;
        }
}

while ( <$fh1> ) {
        if ( m/rId="([^"]+)"/i && defined $hash{ $1 } ) {
                s//src="$hash{ $1 }"/;
        }
        print $_;
}

像这样运行它:

perl script.pl test2 test1

这会产生:

<p><imagedata src="image/image1.jpg"></p>
 ...
<p><imagedata src="image/image3.jpg"></p>
于 2013-05-16T09:50:04.033 回答