使用Text :: CSV_XS perl模块使用换行符解析CSV

时间:2013-09-04 14:42:23

标签: csv text xs

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

解决此问题的最佳方法是什么?

1 个答案:

答案 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