Perl-скрипт для изменения одного файла, принимая значения из второго файла - PullRequest
0 голосов
/ 14 марта 2019

Я написал Perl Script, который обрабатывает два файла, Файл 1 содержит некоторый текст, в котором «ABC» необходимо заменить списком значений, присутствующих во втором текстовом файле.

File1.txt:

Name     -> ABC

Record   -> Exists

Presence -> Existing_ABC

File2.txt:

John

Claude

Kepler

Shane

Austin

Я хочу заменить 'ABC' из File1 на John, тогда исходный File1 должен быть снова взят, а 'ABC' должен быть заменен на Claude и объединен с первой итерацией и так далее до последней записи File2. Итак, в настоящее время сценарий выдает выходные данные только для одного значения «Джон», но не принимает другие значения из списка.

Файл Final Output.txt должен выглядеть так:

Name     -> John

Record   -> Exists

Presence -> Existing_John


Name     -> Claude

Record   -> Exists

Presence -> Existing_Claude

.

.

.

.
.


(#till Austin)

Пожалуйста, найдите мне ошибку в моем сценарии и заранее спасибо: ->

#!/usr/bin/perl

use strict;

use warnings;

my @blockList   =  load_block_list();

my $rules_file  =  'File1.txt';

my $out_file    =  'out.txt';  

open( my $rules,  '<',  $rules_file  );

open( my $out,    '>',  $out_file  );

my $Orig_line;

my $new_line;

my $key;


foreach my $Element (@blockList) {

    while($Orig_line=<$rules>) {

        chomp($Orig_line);

        $new_line = $Orig_line;

        if($Orig_line =~ m/ABC/) {
            $new_line =~ s/ABC/$Element/;
        }

        print {$out} "$new_line\n";

    }
}

sub load_block_list
{
    my $block_list = "File2.txt";

    open(DAT, $block_list) || die("Could not open file $block_list!");
    my @lines=<DAT>;
    close(DAT);

    my @retVal = ();
    foreach my $line (@lines) {
        $line =~ s/[\r\n]+//g;
        push(@retVal,$line),
    }
    return @retVal;
}

1 Ответ

0 голосов
/ 14 марта 2019

Вы должны прочитать File1.txt перед повторением по @blockList.Примерно так:

...
my @template = load_template(); 
my @blockList = load_block_list();
...
foreach my $Element (@blockList) {
    foreach my $Orig_line (@template) {
...

load_template должно быть похоже на load_block_list.

...