使用Perl分割在csv文件?

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

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

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

现在有什么问题是我需要打开这个csv文件,并写入每个logging到另一个文件。我已经尝试与拆分function作为split(,@lines)这将拆分所有昏迷分离值,所以拳头文件第三个logging也所以我试过另一种方式split(",@lines)这种方法将不会支持第二个文件!任何方法来处理这种情况下使用perl

使用Text :: CSVparsingCSV文件。 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文件的所有单个列。

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

如果出于某种原因,你还没有解释,你确实需要将数据分成字段,那么你应该使用Text::CSV模块来做到这一点。 尝试使用正则expression式分割CSV数据很难一般地得到正确的结果,并且对模块进行了尝试和testing。

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

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

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

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

让他们印刷; 作为分隔符。 当我通过这个问题运行你的问题的两行时,我得到这个输出:

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