From: Ben Ostrowsky Date: Tue, 6 Apr 2010 14:23:16 +0000 (+0000) Subject: First version of a utility to convert Athena DBF to TSV suitable for \copy. X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=commitdiff_plain;h=534799536d4f2d89c4bdf9e90ef7029c4e2e01b3 First version of a utility to convert Athena DBF to TSV suitable for \copy. Suitable includes escaping backslash, tab, newline, and carriage return, and converting output to UTF-8. --- diff --git a/athena/athena-dbf-to-tsv.pl b/athena/athena-dbf-to-tsv.pl new file mode 100755 index 0000000..3455d4c --- /dev/null +++ b/athena/athena-dbf-to-tsv.pl @@ -0,0 +1,44 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use XBase; # or could use DBI and DBD::XBase; +use Data::Dumper; +use Getopt::Long; +use Encode; + +my $in = ''; +my $out = ''; +GetOptions('in=s' => \$in, 'out=s' => \$out); + +open OUT, ">$out" or die $!; + +my $table = new XBase $in or die XBase->errstr; + +# get list of field names +my @names = $table->field_names; + +# dump PATRONID, SURNAME, FIRSTNAME +print OUT join ("\t", @names) . "\n"; + +sub clean { + if ( $_ ) { + s/\\/\\\\/g; + s/\n/\\n/g; + s/\r/\\r/g; + s/\t/\\t/g; + Encode::encode("utf8", $_) + } else { ''; } # to avoid 'Use of uninitialized value in join' +} + +my $i = 0; +for (0 .. $table->last_record) { + $i++; + my ($deleted, @row) = $table->get_record($_); + @row = map (&clean, @row); + print OUT join("\t", @row) . "\n" unless $deleted; + +} + +print STDERR "$i records exported to $out.\n";