在csv文件中替换逗号
问题描述:
我正在使用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;
我需要删除逗号,并添加一行到文件的顶部。有任何想法吗?
答
它更容易读取一行,并将其输出到一个新的临时文件中的行的文件,然后重命名文件恢复到原来的:
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的格式不正确”,以及为什么你觉得你需要删除所有单引号。
答
您几乎可以看到标题部分。
对于输出的第一行,只是打印到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会让你说。
请参阅[如何使用Perl创建CSV文件?](http://*.com/questions/1444096/how-do-i-create-a-csv-file-using-perl) – 2010-06-02 14:27:54
's/\'// g'删除所有逗号?这将删除所有单引号。 – Ether 2010-06-02 15:00:27
使用字段分隔符,而不是逗号,例如“|” ,当从您的数据库中倾销可能是另一种解决方案。如果数据字段中包含逗号,您的正则表达式可能会导致问题,例如奥赖利。当导入Excel时,您可以指定字段分隔符。 – heferav 2010-06-03 09:30:36