X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=blobdiff_plain;f=dbf2tsv;fp=dbf2tsv;h=b6974c6034cc6ea054a11760d3782f69c376525b;hp=0000000000000000000000000000000000000000;hb=f294d4e084fa70f1d7c996d7f679490419249ddd;hpb=46ebaf2d318d6ce390b6afd47f69ca7271e7ae80 diff --git a/dbf2tsv b/dbf2tsv new file mode 100755 index 0000000..b6974c6 --- /dev/null +++ b/dbf2tsv @@ -0,0 +1,91 @@ +#!/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 = ''; +my $help = 0; +GetOptions('in=s' => \$in, 'out=s' => \$out, 'help' => \$help); + +if ($help) { &show_help; } + +my @errors; +if ($in eq '') { push @errors, 'Input file must be specified ( --in inputfile.dbf )' }; +if ($out eq '') { push @errors, 'Output file must be specified ( --out outputfile.tsv )' }; +if (@errors > 0) { &show_help (@errors); } + +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"; + + +sub show_help { + my ($msg) = @_; + print "\nERROR - $msg\n" if $msg; + print <