0

2 つのドキュメント 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

1 つの解決策は、最初にファイルを読み取り、と の<imagesources>両方をハッシュに保存することです。その後、他のファイルを1行ずつ読み取り、ハッシュに存在するかどうかを比較し、次のような置換を行います。ridtargetrid

の内容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 に答える