[sf-perl] writing a csv file: how do i embed a newline in a cell?

Miller Hall miller.hall at gmail.com
Fri Apr 8 17:59:45 PDT 2011


You have it right.  Just enclose cells with new lines using double
quotes.  Although, you currently aren't actually creating a csv file
if you are using tabs as your delimiter.

To do this in perl, just use Text::CSV being sure to configure it for
both binary and specifying your eol as \n.
http://search.cpan.org/search?query=Text%3A%3ACSV

Here's an example script:

use Text::CSV;

use strict;
use warnings;

my $csv = Text::CSV->new ( { binary => 1, eol => "\n" } )
	or die "Cannot use CSV: ".Text::CSV->error_diag ();

open my $fh, ">", "test.csv" or die "test.csv: $!";

my @rows = (
	['A1', 'B1', 'C1'],
	['A2', "B2\nline2\nline3", 'C2'],
	['A3', 'B3', 'C3'],
	['A4', 'B4', 'C4'],
);

$csv->print($fh, $_) for @rows;

close $fh;

- Miller

On Fri, Apr 8, 2011 at 5:44 PM, David Alban <extasia at extasia.org> wrote:
> greetings,
>
> i'm writing a program that will produce a csv file so that folks can
> import the output into an ms excel spreadsheet.  i want to be able to
> write newlines that show up inside individual cells.  i created a new
> spreadsheet with a single cell, with newlines inserted inside the cell
> using alt-enter, so that it looked like the following, and saved it as
> a csv file.
>
> a
> b
> c
> d
>
> using cygwin, i see:
>
> $ cat junk.csv
> "a
> b
> c
> d"
>
> $ od -c junk.csv
> 0000000   "   a  \n   b  \n   c  \n   d   "  \r  \n
> 0000013
>
> oh, ok, i need to quote the cell and use newlines.  great.  but when i
> import that back into excel, specifying delimited text and accepting
> the tab character as delimiter, i get four cells one in the same
> column, the last cell containing the trailing double quote:
>
> a
> b
> c
> d"
>
> wtf?
>
> i also tried using perl to create the file with only newlines,
> newlines and carriage returns, and only carriage returns, double
> quoting what should be in a single cell.  nothing i  tried resulted in
> a newline inside a cell.  any ideas?  the data will all be simple text
> with the exception that i'd like to insert newlines inside of cells.
>
> thanks,
> david
> --
> Live in a world of your own, but always welcome visitors.
> _______________________________________________
> SanFrancisco-pm mailing list
> SanFrancisco-pm at pm.org
> http://mail.pm.org/mailman/listinfo/sanfrancisco-pm
>


More information about the SanFrancisco-pm mailing list