Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: How can I read a file that is comma delimited but includes a comma in the string?

by Ovid (Cardinal)
on May 27, 2003 at 23:48 UTC ( #261137=note: print w/ replies, xml ) Need Help??


in reply to How can I read a file that is comma delimited but includes a comma in the string?

If another program is writing that file out, then you need to go to the author of that program and tell them to either learn how to create proper CSV files or pick a format that they can actually use. That line would typically have the last field quoted.

If it's always the case that the last field might have commas and the previous fields never have commas, you could do a restricted split:

my @fields = split ',', $data, 5;

I wouldn't do that, though, because you don't know what's going to change in the future. Whatever program you have creating the CSV data is writing bad data and you shouldn't have to put up with that.

Cheers,
Ovid

New address of my CGI Course.
Silence is Evil (feel free to copy and distribute widely - note copyright text)


Comment on Re: How can I read a file that is comma delimited but includes a comma in the string?
Download Code
Re: Re: How can I read a file that is comma delimited but includes a comma in the string?
by Anonymous Monk on May 28, 2003 at 00:00 UTC
    if all fields were in double quotes then how could I include it and not print the quotes?

      The Perl module Text::CSV can be really helpful here, since it's designed to handle things like quotes for you.

      If not P, what? Q maybe?
      "Sidney Morgenbesser"

      Directly from the POD of Text::CSV_XS:

      require Text::CSV_XS; my $csv = Text::CSV_XS->new; my $column = ''; my $sample_input_string = '"I said, ""Hi!""",Yes,"",2.34,,"1.09" +'; if ($csv->parse($sample_input_string)) { my @field = $csv->fields; my $count = 0; for $column (@field) { print ++$count, " => ", $column, "\n"; } print "\n"; } else { my $err = $csv->error_input; print "parse() failed on argument: ", $err, "\n"; } my @sample_input_fields = ('You said, "Hello!"', 5.67, 'Surely', '', '3.14159'); if ($csv->combine(@sample_input_fields)) { my $string = $csv->string; print $string, "\n"; } else { my $err = $csv->error_input; print "combine() failed on argument: ", $err, "\n"; }

      Cheers,
      Ovid

      New address of my CGI Course.
      Silence is Evil (feel free to copy and distribute widely - note copyright text)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://261137]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (12)
As of 2014-10-21 18:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (106 votes), past polls