in reply to Re: Creating Reports
in thread Creating Reports

Never EVER suggest using split to parse a CSV file. That is an extremely reckless and stupid thing to do. Text::CSV, Text::CSV_XS, Text::xSV, and DBD::CSV and all extremely good solutions. Most are even PurePerl, so loading them isn't an issue on any platform.

------
We are the carpenters and bricklayers of the Information Age.

Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose

I shouldn't have to say this, but any code, unless otherwise stated, is untested

Replies are listed 'Best First'.
Re^3: Creating Reports
by gellyfish (Monsignor) on Jul 27, 2004 at 09:38 UTC

    Never EVER suggest using split to parse a CSV file. That is an extremely reckless and stupid thing to do.

    I have to say that I think that is somewhat overstating the case. I can't see any problem whatsoever with processing character separated data with split when the data is from a known source and is consistent in its format - say:

    FOO,1,2 BAR,2,3 BARG,29,38
    after all we do have split for a reason. On the other hand I think it would be true that if one were to try and process the CSV output of, say, MS Excel with split one is likely to be disappointed with the results, but I wouldn't go so far as you have.

    /J\

Re^3: Creating Reports
by George_Smiley (Initiate) on Jul 26, 2004 at 20:13 UTC
    Just checked out the page on DBD::CSV and that looks like a darn good place to start, thank you
Re^3: Creating Reports
by davorg (Chancellor) on Jul 27, 2004 at 09:47 UTC
    Text::CSV, Text::CSV_XS, Text::xSV, and DBD::CSV and all extremely good solutions

    So is Text::ParseWords. And that's a standard Perl module.

    --
    <http://www.dave.org.uk>

    "The first rule of Perl club is you do not talk about Perl club."
    -- Chip Salzenberg

      Are you saying that Text::ParseWords can handle every case that Text::xSV can? Why hasn't anyone ever mentioned this module? As in I've read nearly every node to do with parsing on this site for the past 3 years and I've never heard of it.

      Would I be correct in thinking that the following are equivalent?

      use Text::ParseWords; my @lines = do { open FH, $filename; <FH> }; foreach my $line (@lines) { my @parsed_out = quotewords(',', undef, $line); # Do stuff here } --------------- use Text::CSV; my $parser = Text::CSV->new; my @lines = do { open FH, $filename; <FH> }; foreach my $line (@lines) { $parser->parse( $line ); my @parsed_out = $parser->fields; # Do stuff here } --------------- use Text::xSV; my $parser = Text::xSV->new; $parser->open_file( $filename ); while (my $parsed_out = $parser->get_row) { # Do stuff here }

      ------
      We are the carpenters and bricklayers of the Information Age.

      Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose

      I shouldn't have to say this, but any code, unless otherwise stated, is untested

        Why hasn't anyone ever mentioned this module? As in I've read nearly every node to do with parsing on this site for the past 3 years and I've never heard of it.

        A quick check with Super Search shows that it has been mentioned here before.

        Would I be correct in thinking that the following are equivalent?

        To be honest I'm not 100% sure. I expect that there are corner cases where Text::ParseWords doesn't do the right thing and one of the other modules does. But I've never come across one of these cases.

        I should point out that in DMP I discussed Text::CSV and not Text::ParseWords because, like you, I hadn't seen Text::ParseWords at that time. It seems to be a very underused module.

        --
        <http://www.dave.org.uk>

        "The first rule of Perl club is you do not talk about Perl club."
        -- Chip Salzenberg