perl Text :: CSV解析

时间:2013-01-28 21:36:34

标签: perl

我有一个非常奇怪的事情(至少对我而言!)我在perl中解析的csv文件在几周内工作得很好,但现在突然间它无法正确解析。

相关信息:

  1. 该文件是Salesforce.com的摘录,每周更新
  2. 文件以逗号分隔,没有转义字符,据我所知3)我玩了new属性,但仍然没有运气,真的
  3. 今天的文件大概是16行(包括标题和底部的一些无关紧要的行,我不在乎)。所以我想评估7行数据。
  4. 我的perl代码如下。我认为这是可靠的,但也许有一个我缺少的设置,因为文件被读作一个长字符串,就像我使用print $.print $_时我只获得1个结果,即整个文件在一行。当然,该行不会解析(并且错误消息是神秘的)。

    更新:

    我发现问题在于SFDC生成文件的方式。该文件的CREnd of Line。我下载了今天的文件,其中CRLFEnd of Line。它完美地处理。然后我去去敏感昨天的文件发布,当我编辑它时,我得到回车和换行作为EOL元素。去图!

    由于某种原因,TEXT::CSV不喜欢仅使用回车作为EOL来解析文件。虽然未在下面的代码中反映,但我已尝试EOL方法中TEXT::CSV->new()属性的所有可能设置。

    我将问题保持打开状态,因为知道如何解析仅使用回车符作为EOL提要的文件可能会有用。

    use strict;
    use warnings;
    use diagnostics;
    use Text::CSV;
    
    my $datadump = "//myServer/WeeklyReport/data_dump.csv";
    my $csv = Text::CSV->new({sep_char => ',', binary => 1});
    open (CSV, "<", $datadump) or die $!;
    
    while (<CSV>) {
        chomp $_;
        next if ($. == 1); # skip first line (contains headers)
        if ($csv->parse($_)) { # parse the line ...
            my @fields = $csv->fields(); 
            my $opp_owner = $fields[8];
            chomp $opp_owner;
            $owner_hash{$opp_owner} = "ignore"; # load into hash to delete duplicates
        } else { # if the line won't parse, return error
            my $err = $csv->error_input;
            print "Failed to parse line: $err";
        }
    }
    
    close CSV;
    

1 个答案:

答案 0 :(得分:1)

您修改后的问题的答案是,没有更改换行符的选项。您可以在http://metacpan.org/pod/Text::CSV查看所有Text :: CSV选项。那里的逐字选项似乎相关,所以我有一个谷歌给你,但无法找到任何东西。 (其中包括&#34; intitle:text intitle:csv intitle:verbatim&#34;没有产生任何结果。)