- Код: Выделить всё
DB_CREATE or DB_AUTO_COMMIT or DB_THREAD
или, если только для чтения:
- Код: Выделить всё
DB_RDONLY or DB_THREAD
DB_CREATE or DB_AUTO_COMMIT or DB_THREAD
DB_RDONLY or DB_THREAD
my $db = tie %hash, 'BerkeleyDB::Btree',
-Filename => "/www/sasplanet/sat0/z3/0/0/0.0.sdb",
-Env => $env,
-Flags => DB_RDONLY or DB_THREAD
or die "Could not read file '0.0.sdb': $!\n" ;
foreach $key (keys %hash) {
print "$key => $hash{$key}\n";
}
$ perl ./readBDB.pl
=>
untie attempted while 1 inner references still exist at ./readBDB.pl line 60.
И в FileName у нас передаётся относительный путь: z3/0/0/0.0.sdb
-Home => "/www/sasplanet/sat0/env"
or die "Could not read file '0.0.sdb': $! $BerkeleyDB::Error\n" ;
files containing multiple databases may only be opened read-only
It is an error to attempt to open a second database in a file that was not initially created using a database name, that is, the file must initially be specified as capable of containing multiple databases for a second database to be created in it.
#!/usr/bin/perl
use warnings;
use strict;
use BerkeleyDB;
my %hash;
my $key;
my $env = new BerkeleyDB::Env
-ErrFile => "/www/sasplanet/sat0/err",
-Home => "/www/sasplanet/sat0/env",
-Flags => DB_CREATE or DB_RECOVER or DB_INIT_LOCK or DB_INIT_LOG or DB_INIT_MPOOL or DB_INIT_TXN or DB_REGISTER or DB_THREAD
#-Config => { DB_DATA_DIR => "/www/sasplanet/sat0",
# DB_LOG_DIR => "/www/sasplanet/sat0/env",
# }
or die "Could not create ENV: $! $BerkeleyDB::Error\n";
my $db = tie %hash, 'BerkeleyDB::Btree',
-Filename => "/www/sasplanet/sat0/z3/0/0/0.0.sdb",
-Subname => "",
-Env => $env,
#-Flags => DB_RDONLY or DB_THREAD
-Flags => DB_CREATE or DB_AUTO_COMMIT or DB_THREAD
or die "Could not read file '0.0.sdb': $! $BerkeleyDB::Error\n" ;
open FILES, ">readbDb99.txt";
foreach $key (keys %hash) {
print FILES "$key\n";
}
close FILES;
untie %hash;
NUL NUL NUL NUL NUL NUL NUL NUL
NUL NUL NUL NUL NUL NUL NUL SOH
NUL NUL NUL NUL NUL NUL NUL STX
NUL NUL NUL NUL NUL NUL NUL ETX
NUL NUL NUL NUL NUL NUL NUL EOT
NUL NUL NUL NUL NUL NUL NUL ENO
NUL NUL NUL NUL NUL NUL NUL ACK
NUL NUL NUL NUL NUL NUL NUL BEL
NUL NUL NUL NUL NUL NUL NUL BS
NUL NUL NUL NUL NUL NUL NUL
NUL NUL NUL NUL NUL NUL NUL
NUL NUL NUL NUL NUL NUL NUL VT
NUL NUL NUL NUL NUL NUL NUL FF
NUL NUL NUL NUL NUL NUL NUL
NUL NUL NUL NUL NUL NUL NUL SO
NUL NUL NUL NUL NUL NUL NUL SI
lLan писал(а):Где можно почитать про формат кеша SAS.Planet?
sub GetTileFileName {
my $aX = $_[0];
my $aY = $_[1];
my $aZ = $_[2];
my $str = "z" . ($aZ+1) . "\\" . ($aX >> 10) . "\\" . ($aY >> 10) . "\\" . ($aX >> 8) . "." . ($aY >> 8) . ".sdb";
print ("$str\n");
}
sub PointToKey {
my $PointX = $_[0];
my $PointY = $_[1];
my $VkeysX = 0;
my $VkeysY = 0;
foreach (0..31) {
my $VSetX = 0;
my $VSetY = 0;
$VSetX = 1 if ((($PointX >> $_) & 1) == 1);
$VSetY = 1 if ((($PointY >> $_) & 1) == 1);
if ($_ <= 15) {
if ($VSetX == 1) { $VkeysY = $VkeysY | (1 << ($_ * 2)); }
if ($VSetY == 1) { $VkeysY = $VkeysY | (1 << ($_ * 2 + 1)); }
} else {
if ($VSetX == 1) { $VkeysX = $VkeysX | (1 << (($_ - 16) * 2)); }
if ($VSetY == 1) { $VkeysX = $VkeysX | (1 << (($_ - 16) * 2 + 1)); }
}
}
return ($VkeysX, $VkeysY);
}
sub KeyToPoint {
my $AkeyX = $_[0];
my $AkeyY = $_[1];
my $PointX = 0;
my $PointY = 0;
($PointX, $PointY) = ValueToPoint ($AkeyY,0,$PointX,$PointY);
($PointX, $PointY) = ValueToPoint ($AkeyX,32,$PointX,$PointY);
return ($PointX, $PointY);
}
sub ValueToPoint {
my $AValue = $_[0];
my $AOffset = $_[1];
my $APointX = $_[2];
my $APointY = $_[3];
my $VPointX = $APointX;
my $VPointY = $APointY;
foreach (0..31) {
if ((($AValue >> $_) & 1) == 1) {
if (($_ % 2) == 0) {
$VPointX = $VPointX | (1 << int(($_ + $AOffset) / 2));
} else {
$VPointY = $VPointY | (1 << int(($_ + $AOffset - 1) / 2));
}
}
}
$APointX = $VPointX;
$APointY = $VPointY;
return ($APointX, $APointY);
}
Вернуться в Раздел для разработчиков программы SAS.Планета
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4