#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
строку, вы получите исходные результаты.