#!/usr/bin/perl # # Copyright (c) 2002 Steve Slaven, All Rights Reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # # A database exporter/importer for using the DB_File and tie() use DB_File; use Getopt::Std; getopts( 'ieh', \%o ); die( qq{ dbexim v2.0 DB file export/import Author: Steve Slave - http://hoopajoo.net Usage: $0 [-hie] DBFILE -i import STDIN into DBFILE -e export DBFILE to STDOUT Generates a plain text output of dbfile so that it can be imported on another platform. Doesn't use Data::Dumper because that requires reading the whole file in to memory which is bad for large db files. } ) if $o{ h }; die( 'Must use -i or -e' ) unless( $o{ i } || $o{ e } ); my $dbfile = shift( @ARGV ); tie %db, 'DB_File', $dbfile || die( "Couldn't tie '$dbfile': $!" ); if( $o{ i } ) { # Import print STDERR "Importing $txfile into $dbfile...\n"; while( $line = ) { chomp( $line ); ( $k, $v ) = split( /:/, $line ); $k = decode( $k ); $v = decode( $v ); print "$k => $v\n"; $db{ $k } = $v; } }elsif( $o{ e } ) { # Export $ref = \%db; print STDERR "Exporting $dbfile to $txfile...\n"; while( ( $k, $v ) = each( %db ) ) { print encode( $k ), ":", encode( $v ), "\n"; } } sub encode { return( join( ",", map { ord( $_ ) } split( //, shift() ) ) ); } sub decode { return( join( "", map { chr( $_ ) } split( /,/, shift() ) ) ); }