linux-l: dbm

Jens Dreger jens.dreger at physik.fu-berlin.de
Do Mär 16 14:11:21 CET 2000


On Thu, Mar 16, 2000 at 01:13:21PM +0100, Andreas Burkhardt wrote:
> High,
> 
> 
> also, ich habe hier auf einem alten Rechner ein Perl-Script, das legt
> eine kleine Datenbank an.
> 
> accounts.db: Berkeley DB 1.85 Hash/Little Endian (Version 2, Bucket Size
> 4096, Bucket Shift 12, Directory Size 256, Segment Size 256, Segment
> Shift 8, Overflow Point 4, Last Freed 2, Max Bucket 10, High Mask 0xf,
> Low Mask 0x7, Fill Factor 40, Number of Keys -27)
> 
> 
> Jetzt ist u.a. das Script auf einen neuen Rechner umgezogen und
> 'accounts.db' interessiert gar nicht mehr. Das Script legt einfach zwei
> neue Dateien an.
> 
> accounts.dir: GNU dbm 1.x or ndbm database, little endian
> accounts.pag: GNU dbm 1.x or ndbm database, little endian
> 
> 
> Tja, eine Möglichkeit wäre jetzt, zu Konvertieren; aber wie?
> 
> 
> Die andere Möglichkeit wäre, das Script auch auf dem neuen Rechner das
> alte Format benutzen zu lassen.
> Ein Ausschnitt aus einer Datei dieses Scripts ist:
> 
> $dbtype="dbm";
> $dbpck = 'AnyDBM_File';
> $flags = O_CREAT | O_RDWR;
> 
> 
> Hier habe ich schon alles mögliche geändert. Entweder das Script
> interessiert das gar nicht oder es verweigert komplett die
> Zusammenarbeit.
> 
> 
> Was tun?
>

Moin Andreas !

Wie waer's mit db->gdbm umkopieren ?

--------8<---------------
#!/usr/bin/perl -w
# db2gdbm, (c)neulich J.D.
#
use DB_File;
use GDBM_File;

tie %db,  'DB_File', "db.dat";
tie %gdbm,'GDBM_File', "gdbm.dat", &GDBM_WRCREAT, 0640;

foreach $key (keys %db) { $gdbm{$key} = $db{$key}; }

untie %db;
untie %gdbm;
------------8<------------

Keine Ahnung, ob das geht. Hab's nur kurz an einer "sythetischen"
Datenbank getestet...

Gruss,

Jens.



Mehr Informationen über die Mailingliste linux-l