1

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

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

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

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

4

3 回答 3

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 文件的所有单个列。

于 2013-03-22T09:48:49.237 回答
2

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

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

于 2013-03-22T09:46:42.403 回答
-1

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

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

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

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

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

$ ./testregexp.pl 
xxx;yyy;97,234
abc;def;23,475
于 2013-03-22T09:38:25.243 回答