我们使用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 => "\\"
});
使用mysql LOAD DATA infile创建CSV。如果有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
解决此问题的最佳方法是什么?
答案 0 :(得分:0)
您可以先清理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&gt; new.csv