in reply to Converting File Delimiters
Text::CSV can help in parsing the quoted fields with commas.
Quoting the fields containing commas in the original data stops those commas from being interpreted as separator characters. Changing the separator to a pipe character (|) removes that requirement. Consider whether |ccc, ddd| is sufficient for your needs or do you really want |"ccc, ddd"|.
If the former, this skeleton code shows the technique:
#!/usr/bin/env perl use strict; use warnings; use Text::CSV; my $csv = Text::CSV::->new() or die Text::CSV::->error_diag(); while (my $row = $csv->getline(\*DATA)) { print join('|' => @$row), "\n"; } __DATA__ aaa,bbb,"ccc, ddd",fff
Output:
$ pm_csv_to_psv.pl aaa|bbb|ccc, ddd|fff
If you want to retain the quotation marks, you can change the print line to:
print join('|' => map { /,/ ? '"'.$_.'"' : $_ } @$row), "\n";
(There may be a more elegant way to do that.)
Output:
$ pm_csv_to_psv.pl aaa|bbb|"ccc, ddd"|fff
-- Ken
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Converting File Delimiters
by mmueller44 (Novice) on Aug 09, 2012 at 22:22 UTC | |
by kcott (Archbishop) on Aug 10, 2012 at 06:22 UTC | |
by mmueller44 (Novice) on Aug 14, 2012 at 01:31 UTC | |
by BrowserUk (Patriarch) on Aug 14, 2012 at 02:43 UTC | |
by mmueller44 (Novice) on Aug 16, 2012 at 18:07 UTC |