Замена некоторой строки в текстовом файле переносит оставшийся текст на следующую строку

#perl

#perl

Вопрос:

Я пытаюсь заменить строку в текстовом файле с помощью скрипта Perl. Значение успешно заменяется. Однако это переносит оставшийся текст строки на следующую строку. Я хочу, чтобы строка была неповрежденной, как и раньше. Кто-нибудь может помочь?

sample_file_dml содержит приведенный ниже текст:

 seq_no,1,1,GET,xyz
seq_no,1,2,PUT,xyz
 

Я хочу заменить seq_no в каждой строке значение переменной seq_no_value . Это значение получается путем некоторых вычислений в моем коде (например — 9999).

Ожидаемый результат:

 9999,1,1,GET,xyz
9999,1,2,PUT,xyz
 

Но я получаю следующий вывод:

 9999
,1,1,GET,xyz
9999
,1,2,PUT,xyz
 

Используемый фрагмент кода:

         open my $IN, '<', $sample_dml_file or die $!;
        open my $OUT, '>>', $new_dml_file or die $!;
        
        while (<$IN>) {
            s/b(seq_no)b/$seq_no_value/g;
            print {$OUT} $_;
        }
        close $OUT or die $!;
 

Ответ №1:

Я полагаю $seq_no_value , что в конце также есть символ новой строки ( n ). Вы можете удалить его с помощью chomp:

 chomp $seq_no_value;
 

Возможно, вы читали строки файла, когда устанавливали переменную.

Вот автономный пример:

 use warnings;
use strict;

my $seq_no_value = "9999n";
chomp $seq_no_value;
while (<DATA>) {
    s/b(seq_no)b/$seq_no_value/g;
    print $_;
}

__DATA__
seq_no,1,1,GET,xyz
seq_no,1,2,PUT,xyz
 

Это выводит:

 9999,1,1,GET,xyz
9999,1,2,PUT,xyz
 

Если вы закомментируете chomp строку, вы получите исходные результаты.