Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2016-12-11 01:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    On a regular basis, I'm most likely to spy upon:













    Results (168 votes). Check out past polls.