Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

Answer: How do I create a CSV from a 2D array?

by bart (Canon)
on Sep 30, 2004 at 15:07 UTC ( #395372=categorized answer: print w/replies, xml ) Need Help??

Q&A > arrays > How do I create a CSV from a 2D array? - Answer contributed by bart

If you plan to print it to a file directly, and not quoting the individual fields (for a simple tab separated values table) I think using the special variables $, and $\ is the approach leaving the code most readable:
@headers = qw(one two three); @rows = ( ['yes', 'no', 'maybe'], ['alpha', 'beta', 'and all the rest'], ); { local($\, $,) = ("\n", "\t"); print @headers; print @$_ foreach @rows; }

It's more complex if you want a CSV file, where the field values can contain the delimiter, the quoting character, or a newline. The next code will only quote a field if necessary:

@headers = qw(one two three); @rows = ( ['yes', 'no', 'maybe'], ['17" monitor', 'a;b', "foo\nbar"], ); { local($\, $,) = ("\n", ";"); print map { my $s = $_; $s =~ s/([\n;])|"/ $1 || '""' /ge and $s = qq["$s"]; $s } @$_ foreach \@headers, @rows; }
Following the modern Microsoft preference, I've used semicolons for the delimiter; and I've doubled the literal quotes appearing in the field data.

Log In?

What's my password?
Create A New User
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (19)
As of 2017-02-28 13:36 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (400 votes). Check out past polls.