首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正在尝试读取DBM文件

正在尝试读取DBM文件
EN

Stack Overflow用户
提问于 2015-01-15 23:09:37
回答 2查看 1.6K关注 0票数 0

我有一个精简的实时Linux机器,可以连接一些硬件。

配置文件是*.dbm文件,我无法访问它们。它们看起来像是某种键值数据库,但我尝试过的每个库都是空的。

我尝试过使用DBM读取Perl、Python和Ruby中的库,但没有成功。任何关于这些文件的指导都会很棒,我以前没有见过它们。

这就是当我猫出一个文件时发生的事情。

代码语言:javascript
运行
复制
 DBMFILE  Aug 31 2004,�
,jy                    �
�~���"��+�K&��gB��7JJ�
                                         ,��GLOBA.PB_COMBI�SMSI���
JG]
,��BUS_DP
PC  �
            '

xLokalT
          J��
                ,��SL_DP
                             PC!�
                                    ��
#,��PLC_PARAMJPf,��PROJEKT�PROFIBUS new network1.00022.02.2012J,��KBL_HEADER:�JJp,��KBLJ��,��ALI-SETUPB ����
������������������JJ,,��OBJ-DEFJJ��,��ALI_CLIENTTJJ�
,��ALI_SERVERJ      J\r�����2,  ��      ST_OV_00Boolean0Integer8    0Integer16
0Integer32
            0Unsigned8
0Unsigned32Floating-Point0igned16
Octet String Jo� ,��DESCRIPT �ABB OyABB Drives RPBA-01ABBSlave1***reserved***�
                                                                                      �
                                                                                      %  

所以为了展示我已经尝试过的东西,并且只得到了空对象(没有键值)*编辑

perl -

代码语言:javascript
运行
复制
#!/usr/bin/perl -w                                                                                                                                                                                                                             

use strict;

use DB_File;
use GDBM_File;

my ($filename, %hash, $flags, $mode, $DB_HASH) = @ARGV;

tie %hash,  'DB_File', [$filename, $flags, $mode, $DB_HASH]
  or die "Cannot open $filename: $!\n";

while ( my($key, $value) = each %hash ) {
   print "$key = $value\n";
}

 # these unties happen automatically at program exit                                                                                                                                                                                            
untie %hash;

,则不返回任何内容。

python -

代码语言:javascript
运行
复制
db = dbm.open('file', 'c')

红宝石-

代码语言:javascript
运行
复制
db = DBM.open('file', 666, DBM::CREATRW)

所有这些都是空返回的。我假设它们使用相同的低级库。关于DBM文件的一些历史/上下文将会很棒,因为似乎有一些不同的版本。

**编辑

在其上运行文件将返回

代码语言:javascript
运行
复制
$ file abb12mb_uncontrolledsynch_ppo2_1slave.dbm 
abb12mb_uncontrolledsynch_ppo2_1slave.dbm: data

和运行字符串输出

代码语言:javascript
运行
复制
$ strings abb12mb_uncontrolledsynch_ppo2_1slave.dbm 
DBMFILE  
Aug 31 2004
GLOBAL
PB_COMBI
SMSI
BUS_DP
Lokal
SL_DP
PLC_PARAM
PROJEKT
PROFIBUS new network
1 .000
22.02.2012
KBL_HEADER
ALI-SETUP
OBJ-DEF
ALI_CLIENT
ALI_SERVER
ST_OV_0
Boolean
Integer8
Integer16
Integer32
Unsigned8
Unsigned16
Unsigned32
Floating-Point
Octet String
DESCRIPT
ABB Oy
ABB Drives RPBA-01
ABBSlave1
***reserved***
EN

回答 2

Stack Overflow用户

发布于 2015-01-16 01:14:09

为了让我的评论更清晰,您应该尝试使用DB_File的默认选项,如下所示

代码语言:javascript
运行
复制
use strict;
use warnings;

use DB_File;

my ($filename) = @ARGV;

tie my %dbm, 'DB_File', $filename or die qq{Cannot open DBM file "$filename": $!};

print "$_\n" for keys %dbm;
票数 1
EN

Stack Overflow用户

发布于 2015-01-15 23:39:53

documentation for Perl's dbmopen function

此函数在很大程度上已被tie函数取代。

你可能想试着用DB_File tie它。

代码语言:javascript
运行
复制
 use DB_File;
 tie %hash,  'DB_File', $filename, $flags, $mode, $DB_HASH;

那么你的数据就是%hash格式的。

对文件运行file以查看它的实际内容可能也很有趣。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27966496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档