2010-06-02 124 views
0

我正在使用perl将原始数据库转储解析为csv文件。问题在于它没有为Excel正确格式化。我需要在文件顶部添加一个标题,并删除所有的逗号。这可以在perl中完成,但是这是一个更大的perl脚本的一部分,所以我想在主perl脚本中完成它。我是想这样的事情:在csv文件中替换逗号

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; 

我需要删除逗号,并添加一行到文件的顶部。有任何想法吗?

+3

请参阅[如何使用Perl创建CSV文件?](http://stackoverflow.com/questions/1444096/how-do-i-create-a-csv-file-using-perl) – 2010-06-02 14:27:54

+1

's/\'// g'删除所有逗号?这将删除所有单引号。 – Ether 2010-06-02 15:00:27

+0

使用字段分隔符,而不是逗号,例如“|” ,当从您的数据库中倾销可能是另一种解决方案。如果数据字段中包含逗号,您的正则表达式可能会导致问题,例如奥赖利。当导入Excel时,您可以指定字段分隔符。 – heferav 2010-06-03 09:30:36

回答

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的格式不正确”,以及为什么你觉得你需要删除所有单引号。

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会让你说。