使用perl在csv文件中拆分?

时间:2013-03-22 09:35:35

标签: regex perl excel csv

朋友我有两个我需要转换为电子表格的CSV文件。它包含以下数据;

"xxx","yyy","97,234"
     .
     .
     .

abc,def,"23,475"
       .
       .
       .
       .

现在问题是我需要打开这个csv文件并将每个记录写入另一个文件。我已经尝试使用split函数作为split(,@lines)这将分割所有逗号分隔值,这样拳头文件第三记录也分为两个!。所以我尝试了另一种方法split(",@lines)此方法不支持第二个文件!使用 perl 处理此案例的任何方法

3 个答案:

答案 0 :(得分:3)

使用Text :: CSV来解析CSV文件。 Text :: CSV的示例用法如下:

#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;
$\="\n";

open my $fh, '<', 'file.csv' or die $!;
my $csv=Text::CSV->new;
while(<$fh>){
        $csv->parse($_);
        my @fields=$csv->fields();
}
close $fh;

数组@fields包含csv文件的所有单独列。

答案 1 :(得分:2)

如果您需要将两个CSV文件中的所有记录复制到第三个文件中,则根本不需要拆分数据:只需在记录级别读取和写入数据。

如果由于某些原因你没有解释,你需要将数据拆分成字段,那么你应该使用Text::CSV模块。尝试使用正则表达式拆分CSV数据通常很难正确,并且模块已经过试用和测试。

答案 2 :(得分:-1)

假设您不希望输出中包含"

my @values = $line =~ /\"?(\w+)\"?,\"?(\w+)\"?,\"?([\d,]+)\"?/

将删除任何"并将文本/数字存储在数组@values中,然后打印出来:

print join(";", @values) . "\n";

将它们打印为;作为分隔符。当我从你的问题中运行两行时,我得到了这个输出:

$ ./testregexp.pl 
xxx;yyy;97,234
abc;def;23,475