我使用perl将原始数据库转储解析为csv文件。问题是Excel的格式不正确。我需要在文件顶部添加一个标题,并删除所有逗号。这可以在perl one liner中完成,但这是更大的perl脚本的一部分,所以我想在主perl脚本中完成它。我正在尝试这样的事情:
print "Formatting csv file... $csvFile\n";
open IN, '<', $csvFile or die;
my @contents = <IN>;
close IN;
@contents =~ s/\'//g;
open OUT, '>', $csvFile or die;
print OUT @contents;
close OUT;
你当然可以这样做:
@contents =~ s/\'//g;
我需要删除逗号并在文件顶部添加一行。有什么想法吗?
答案 0 :(得分:0)
逐行读取文件并将其输出到新的临时文件更容易,然后将该文件重命名为原始文件:
print "Formatting csv file... $csvFile\n";
my $newfile = '/tmp/newfilename.csv';
open(my $inFileHandle, '<', $csvFile) or die "cannot open $csvFile for reading: $!";
open(my $outFileHandle, '>', $newFile) or die "cannot open $newFile for writing: $!";
print $outFileHandle "The header line you need to add\n";
while (my $line = <$inFileHandle>)
{
$line =~ s/\'//g;
print $outFileHandle $line;
}
close $inFileHandle;
close $outFileHandle;
rename $newFile, $csvFile;
...但我想知道你的意思是“它没有正确格式化Excel”,以及为什么你觉得你需要删除所有单引号。
答案 1 :(得分:0)
你几乎就是标题部分。
对于输出的第一行,只需将其打印到CSV之前的文件:
my $header='"field 1","field 2","field n"';
open OUT, '>', $csvFile or die;
print OUT "$header\n";
# print the CSV part...
close OUT;
对于CSV部分,请使用库。有许多。 This tutorial会告诉你。