朋友我有两个我需要转换为电子表格的CSV文件。它包含以下数据;
"xxx","yyy","97,234"
.
.
.
和
abc,def,"23,475"
.
.
.
.
现在问题是我需要打开这个csv文件并将每个记录写入另一个文件。我已经尝试使用split函数作为split(,@lines)
这将分割所有逗号分隔值,这样拳头文件第三记录也分为两个!。所以我尝试了另一种方法split(",@lines)
此方法不支持第二个文件!使用 perl 处理此案例的任何方法
答案 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