使用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