替换csv文件中的逗号

时间:2010-06-02 14:26:25

标签: perl

我使用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;

我需要删除逗号并在文件顶部添加一行。有什么想法吗?

2 个答案:

答案 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会告诉你。