我们使用Text::CSV_XS module
来解析CSV,并提供以下选项:
my $csv = Text::CSV_XS->new ({
binary=> 1, eol => "n",
allow_loose_quotes => 1,
allow_loose_escapes=> 1,
escape_char => "\"
});
CSV是使用mysql LOAD DATA infile创建的。如果存在NULL
值,则MYSQL
将字段中的N
相加
分析数据前:
1973127,99,N
如果我们使用escape_char => "\"
,则N
将替换为N
解析后的数据:
1973127,99,N
此外,具有双''
的数据被去除
例如:D\'Mello
更改为D'Mello
如果我们删除escape_char => "\"
,则数据将更改,如下所示
解析前:
1539190,125,"" SHIDDH - SHILA "
"126"
解析后:
1539190,125,\" SHIDDH - SHILA \"\n\"126
解决这个问题的最佳方法是什么?
您可以先清理CSV文件。
#!/usr/bin/perl
use strict;
use warnings;
my $file = shift;
open CSV, "<$file" or die;
foreach my $line (<CSV>) {
$line =~ s/\N/NULL/g;
print $line;
}
close CSV;
perl cleanup.pl my.csv>新.csv