Perl 替换csv文件中的逗号

Perl 替换csv文件中的逗号,perl,Perl,我使用perl将原始数据库转储解析为csv文件。问题是Excel的格式不正确。我需要在文件顶部添加一个头,同时删除所有逗号。这可以在perl单行程序中完成,但这是更大的perl脚本的一部分,所以我想在主perl脚本中完成。我试着这样做: print "Formatting csv file... $csvFile\n"; open IN, '<', $csvFile or die; my @contents = <IN>; close IN;

我使用perl将原始数据库转储解析为csv文件。问题是Excel的格式不正确。我需要在文件顶部添加一个头,同时删除所有逗号。这可以在perl单行程序中完成,但这是更大的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;

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

逐行读取文件并将其输出到新的临时文件,然后将该文件重新命名为原始文件更容易:

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;
打印“格式化csv文件…$csvFile\n”;
我的$newfile='/tmp/newfilename.csv';
打开(我的$inFileHandle,,$newFile)或死亡“无法打开$newFile进行写入:$!”;
打印$outFileHandle“需要添加的标题行\n”;
while(我的$line=)
{
$line=~s/\'//g;
打印$outFileHandle$行;
}
关闭$inFileHandle;
关闭$outFileHandle;
重命名$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部分,请使用库。有很多。我会让你明白的

查看
s/\'//g
如何删除所有逗号?这将删除所有单引号。从数据库转储时使用字段分隔符(而不是逗号,例如“|”)可能是另一种解决方案。如果数据字段(如O'Reilly)中嵌入逗号,则正则表达式可能会导致问题。导入Excel时,可以指定字段分隔符。
my $header='"field 1","field 2","field n"';

open OUT, '>', $csvFile or die;
print OUT "$header\n";
# print the CSV part...
close OUT;