#regex #perl #newline #carriage-return
#регулярное выражение #perl #новая строка #возврат каретки
Вопрос:
поэтому я постараюсь сделать это как можно проще. Я форматирую файлы прямо сейчас. Это задачи, которые должен выполнить скрипт:
- Удалить
rn
- Удалить
amp;
- заменить
#A
наn#A
- заменить
#D
наn#D
Мой код уже работает, но он также добавляется r
перед каждым n
добавленным, и это то, чего я не хочу, потому r
что не распознается программой, в которую я хочу импортировать свои файлы. Знаете ли вы метод только для удаления r
, не удаляя также n
?
Вот мой код. Я думаю $data =~ s!r!!g;
, имеет значение только последнее. Почему это не работает так, как задумано? rn
После каждой строки все еще есть…
opendir my $dir_a, $scriptdir or die "Kann Verzeichnis nicht oeffnen: $!";
my @stammdateien = grep { /root/ } readdir $dir_a;
closedir $dir_a;
foreach my $stammdatei (@stammdateien){
if ($stammdatei eq "root101" or $stammdatei eq "root112" or $stammdatei eq "root116"){
my $stammdateipfad = "$scriptdir\$stammdatei";
my $data = lese_file($stammdateipfad);
$data =~ s!r|n!!g;
$data =~ s!amp;!!g;
$data =~ s!#A!n#A!g;
$data =~ s!#D!n#D!g;
$data =~ s!#M | INSERT |!#M | UPDATE_INSERT |!g;
$data =~ s!r!!g;
schreibe_file($stammdateipfad, $data);
}
}
sub lese_file {
my ($stammdatei) = @_;
open my $in, "<", $stammdatei or die "Konnte die Datei '$stammdatei' nicht zum lesen oeffnen: $!";
local $/ = undef;
my $all = <$in>;
close $in;
return $all;
}
sub schreibe_file {
my ($stammdateipfadout, $data) = @_;
my $outputdatei = "$stammdateipfadout"."_CONVERTED";
open my $out, ">", "$outputdatei" or die "Konnte die Datei $outputdatei nicht zum schreiben oeffnen: $!";
print $out $data;
close $out;
print "====> Vorgang abgeschlossen!nn";
return;
}
Комментарии:
1.
$data =~ s![rn] !n!g;
или$data =~ s![rn] $!n!g;
2. @ssr1012, к сожалению, не работает, при загрузке с помощью «показать все символы» в notepad он по-прежнему показывает CR LF в конце каждой строки
Ответ №1:
Вы используете платформу Windows? Уровень ввода-вывода по умолчанию преобразуется n
rn
в Windows. Чтобы отключить это, попробуйте один из:
open my $out, ">", "$outputdatei" or ...;
binmode $out;
open my $out, ">:raw", "$outputdatei" or
Комментарии:
1. Я просто подумал о том же.
2. да, это работает хорошо, спасибо! 🙂 редактировать: использовал
binmode $out;
вариант!