use warnings;
use DBI;
use File::Basename;
my $dir = '.';
my $file = 'noname.csv';
my $table = (fileparse($file,'.csv'))[0];
my $cols = [qw(Username Email Posts Timestamp)];
my $sep = ',';
open outFile, '>', $file;
print outFile <<SampleData;
Username, Email, Posts, Timestamp
ed,ed\@there,11,10:23:01
bill,bill\@there,5,10:23:02
SampleData
close outFile;
my $dbh = DBI->connect(
"DBI:CSV:f_dir=$dir;csv_eol=\n;csv_sep_char=$sep;",
{RaiseError=>1},);
$dbh->{csv_tables}->{$table} =
{
file => $file,
col_names => $cols,
};
my $sth = $dbh->prepare("SELECT Username, Email, Posts, Timestamp FROM
+ noname");
$sth->execute() or die "Cannot execute: " . $sth->errstr();
my %newPosts;
while ((my $Username, my $Email, my $Posts, my $Timestamp) = $sth->fet
+chrow_array ())
{
next if ! defined $Timestamp;
print "$Username, $Email, $Posts, $Timestamp\n";
$newPosts{$Username} = ++$Posts;
}
for my $Username (keys %newPosts)
{
my $Posts = $newPosts{$Username};
$sth = $dbh->prepare("UPDATE noname SET Posts = $Posts WHERE Usernam
+e = '$Username'");
$sth->execute() or die "Cannot execute: " . $sth->errstr();
}
$sth = $dbh->prepare("SELECT Username, Email, Posts, Timestamp FROM no
+name");
$sth->execute() or die "Cannot execute: " . $sth->errstr();
while ((my $Username, my $Email, my $Posts, my $Timestamp) = $sth->fet
+chrow_array ())
{
next if ! defined $Timestamp;
print "$Username, $Email, $Posts, $Timestamp\n";
}
$sth->finish();
Prints:
Username, Email, Posts, Timestamp
ed, ed@there, 11, 10:23:01
bill, bill@there, 5, 10:23:02
Username, Email, 1, Timestamp
ed, ed@there, 12, 10:23:01
bill, bill@there, 6, 10:23:02
Perl is Huffman encoded by design.
|