Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

Re^4: edit a CSV and "in-place" replacement

by bitingduck (Chaplain)
on Jun 22, 2012 at 08:02 UTC ( #977796=note: print w/replies, xml ) Need Help??

in reply to Re^3: edit a CSV and "in-place" replacement
in thread edit a CSV and "in-place" replacement

Just when you start to think that, you discover one of your contacts is "Dinosaur, Jr." or you forget about all those lawyers who like to put "I. M. Alawyer, Esq." in their contact info, and you get a bunch of munged up data. Excel will correctly quote cells full of commas when you export to CSV. I haven't tried it with Google.

  • Comment on Re^4: edit a CSV and "in-place" replacement

Replies are listed 'Best First'.
Re^5: edit a CSV and "in-place" replacement
by Tux (Abbot) on Jun 22, 2012 at 09:31 UTC

    The original question was "in-place-editing" required. Using the CSV module(s) Text::CSV_XS (used in DBD::CSV) and/or Text::CSV (which uses Text::CSV_XS if available for speed) you cannot in-place edit, but you can set up two instances: one for input, and one for output. This has to be used instead of DBD::CSV if there are no headers or no unique keys, somewhat along these lines:

    my $ci = Text::CSV_XS->new ({ binary => 1, auto_diag => 1 }); my $co = Text::CSV_XS->new ({ binary => 1, auto_diag => 1, eol => "\n" + }); open my $fi, "<:encoding(utf-8)", "google.csv"; open my $fo, ">:encoding(utf-8)", "contacts.csv"; while (my $row = $ci->getline ($ci)) { $row->[34] =~ s/^0/+91/; $co->print ($fo, $row); } close $fi; close $fo;

    Which is safe for embedded comma's as you describe (when correctly quoted). On huge files, you can speed this even using bind_columns ().

    Another (huge) advantage is that this is MUCH faster than using DBD::CSV, has no size limits (other than disk storage) and can be used in streams, both in and out. DBD::CSV is likely to keep the complete file in memory, probably even twice.

    Enjoy, Have FUN! H.Merijn

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://977796]
[chacham]: How many man-hours would you estimate you have invested in learning Perl? what an annoying poll
[chacham]: s/annoying/ugly

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2017-04-30 20:50 GMT
Find Nodes?
    Voting Booth?
    I'm a fool:

    Results (542 votes). Check out past polls.