如何在不删除 \n 的情况下删除 \r?
How do I remove \r without removing \n?
所以我会尽量让它变得简单。我现在正在格式化文件。这些是脚本应该完成的任务:
- 删除
\r\n
- 删除
&
- 将
#A
替换为\n#A
- 将
#D
替换为\n#D
我的代码已经可以运行了,但它还在每个添加的 \n
前面添加了 \r
,这是我不想要的,因为 \r
不被我想将我的文件导入到的程序。您知道只删除 \r
而不删除 \n
的方法吗?
这是我的代码。我想只有最后一个 $data =~ s!\r!!g;
是相关的。为什么这不像预期的那样工作?每行后面还有\r\n
...
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!&!!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!\n\n";
return;
}
您在 Windows 平台上吗?默认 IO 层在 Windows 上将 \n
转换为 \r\n
。要禁用它,请尝试以下之一:
open my $out, ">", "$outputdatei" or ...;
binmode $out;
open my $out, ">:raw", "$outputdatei" or
所以我会尽量让它变得简单。我现在正在格式化文件。这些是脚本应该完成的任务:
- 删除
\r\n
- 删除
&
- 将
#A
替换为\n#A
- 将
#D
替换为\n#D
我的代码已经可以运行了,但它还在每个添加的 \n
前面添加了 \r
,这是我不想要的,因为 \r
不被我想将我的文件导入到的程序。您知道只删除 \r
而不删除 \n
的方法吗?
这是我的代码。我想只有最后一个 $data =~ s!\r!!g;
是相关的。为什么这不像预期的那样工作?每行后面还有\r\n
...
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!&!!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!\n\n";
return;
}
您在 Windows 平台上吗?默认 IO 层在 Windows 上将 \n
转换为 \r\n
。要禁用它,请尝试以下之一:
open my $out, ">", "$outputdatei" or ...;
binmode $out;
open my $out, ">:raw", "$outputdatei" or