2010-06-02 163 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會讓你說。