我试图比较两个文件test1,test 2
中的字符串测试1:
<p><imagedata rid="rId7"></p>
...
<p><imagedata rid="rId8"></p>
的Test2:
<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";
}
}
}
答案 0 :(得分:0)
一种解决方案可能是首先使用<imagesources>
读取文件,并将rid
和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>