in reply to DBD::CSV - How to insert a new column with column header in an existing CSV file

As I don't know SQL, my first idea was to deal with the csv as a text file. hmmm.

It seems DBD::CSV doesn't like "ALTER TABLE" so, here is a POC with "CREATE TABLE".

I hope, it is not the wrong way to do it.

#!/usr/bin/env perl use strict; use warnings; use DBI; my $table = "t.csv"; my $newtable = "tnew.csv"; my $dbh = DBI->connect ("dbi:CSV:") or die "Cannot connect: $DBI::errstr"; my $query = "SELECT * FROM $table"; my $sth = $dbh->prepare ($query); $sth->execute (); unlink $newtable; $dbh->do ("CREATE TABLE $newtable (vm_name char(0), vm_cluster char(0) +, zone char(0))") or die "Cannot prepare: " . $dbh->errstr (); my ($vm_name, $vm_cluster); $sth->bind_columns (\$vm_name, \$vm_cluster,undef); while ($sth->fetch) { $dbh->do ("INSERT INTO $newtable VALUES (". $dbh->quote ($vm_name) . ",". $dbh->quote ($vm_cluster) . ",". $dbh->quote (&whatzone()) . ")" ); } $sth->finish; #unlink $table; #rename $newtable,$table; sub whatzone { return "zone".(1+int rand(3)); }
  • Comment on Re: DBD::CSV - How to insert a new column with column header in an existing CSV file
  • Download Code

Replies are listed 'Best First'.
Re^2: DBD::CSV - How to insert a new column with column header in an existing CSV file
by slayedbylucifer (Scribe) on Jul 19, 2012 at 16:50 UTC
    brx, Thanks for the detailed response. your code structure gave me the direction to proceed. I have re-written your code and edited per my requirement but your concept remains the same. Thank you very much for your time.