0

これが可能かどうかはわかりませんが、そうであることを願っています。

ファイル backup.xml に次の行が 766 回あります。

*** Hosting Services

次に、list.txt766行を含むファイルがあります。***-の 766 行のそれぞれの内容に置き換える必要がありlist.txt、可能であれば同じ順序にする必要があります。

助けてくれてありがとう!

4

4 に答える 4

1

考え:

loop over the lines of the B(ackup file)
  if you (F)ind a B-line to change
     read the next line of the L(ist file)
     change
  print the line to R(result file)

プラン:

read_open B
read_open L
write_open R
while (line from B)
  if (F) {
    read replacemment from L
    change line
  }
  print line to R
}
close R, L, B

実装 I (read_open、ループ、B を参照):

use strict;
use warnings;
use English qw(-no_match_vars);

my $bfn = '../data/AA-backup-xml';
open my $bfh, '<', $bfn or die "Can't read open '$bfn': $OS_ERROR";
while (my $line = <$bfh>) {
        print $line;
}
close $bfh or die "Can't read close '$bfn': $OS_ERROR";

出力:

perl 01.pl
whatever
whatever
*** Hosting Services
whatever
whatever
whatever
*** Hosting Services
whatever
whatever
*** Hosting Services
whatever
whatever
whatever
*** Hosting Services

実装 II (読み取り/書き込み、F、置換、最初の結果):

use Modern::Perl;
use English qw(-no_match_vars);

my $bfn = '../data/AA-backup-xml';
open my $bfh, '<', $bfn or die "Can't read open '$bfn': $OS_ERROR";
my $lfn = '../data/AA-list.txt';
open my $lfh, '<', $lfn or die "Can't read open '$lfn': $OS_ERROR";
my $rfn = '../data/AA-result';
open my $rfh, '>', $rfn or die "Can't write open 'rlfn': $OS_ERROR";
while (my $line = <$bfh>) {
    if ($line =~ /\*{3}/) {
        my $rpl = <$lfh>;
        $rpl = substr($rpl, 0, 3);
        $line =~ s/\*{3}/$rpl/;
    }
    print $rfh $line;
}
close $rfh or die "Can't write close '$rfn': $OS_ERROR";
close $lfh or die "Can't read close '$lfn': $OS_ERROR";
close $bfh or die "Can't read close '$bfn': $OS_ERROR";

出力:

type ..\data\AA-result
whatever
whatever
001 Hosting Services
whatever
whatever
whatever
002 Hosting Services
whatever
whatever
003 Hosting Services
whatever
whatever
whatever
004 Hosting Services

これがうまくいかない場合 (おそらく、B の構造を誤って推測したか、F 戦略が単純すぎるため)、B、L、および R の代表的なサンプルを公開してください。

于 2013-05-24T08:41:37.287 に答える