in reply to How do I create a CSV from a 2D array?
@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:
Following the modern Microsoft preference, I've used semicolons for the delimiter; and I've doubled the literal quotes appearing in the field data.@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; }
|
|---|