修复Perl“损坏”的文件

时间:2013-12-06 15:41:22

标签: perl

我有一堆使用此代码创建的文件:

use LWP::Simple;

my $xl = get("http://www.somewhere.com/file.xls");
open(my $outf, '>', "C:/file.xls") || die $!;
print $outf $xl;

直到最近我才意识到我应该在文件句柄中使用'>:raw'而不仅仅是'>'。所以现在我有一堆文件以某种方式被修改,阻止Excel打开它们。

我的问题是我是否可以使用Perl对这些文件进行处理以返回原始Excel文件。换句话说,是否有可能弄清楚我可以使用新的Perl脚本对文件进行哪些编辑?

1 个答案:

答案 0 :(得分:5)

它将LF转换为CRLF。您只需将CRLF的任何实例更改回LF。

my $qfn_in  = $qfn;
my $qfn_out = $qfn . ".new";

open(my $fh_in,  '<:raw', $qfn_in ) or die $!;
open(my $fh_out, '>:raw', $qfn_out) or die $!;

while (<$fh_in>) {
   s/\r\n\z/\n/;
   print($fh_out $_);
}

my $qfn_in  = $qfn;
my $qfn_out = $qfn . ".new";

open(my $fh_in,  '<:raw:crlf', $qfn_in ) or die $!;
open(my $fh_out, '>:raw',      $qfn_out) or die $!;

print($fh_out $_) while <$fh_in>;

如果你有dos2unix,你也可以使用它。 (虽然JRFerguson说他的版本会破坏其中带有字符1A的文件。)