如何从ACT读取非标准DBF备忘录(BLOB)文件?

时间:2012-05-30 06:23:05

标签: dbase act

我正在尝试将Act 2000中的数据转换为MySQL数据库。我已成功将DBF文件导入到各个MySQL表中。但是我遇到了*.BLB文件的问题,该文件似乎是一个非标准的备忘录文件。

DBF文件将自己标识为dbase III Plus,无备忘录格式。有一个*.BLB是一个备忘录文件,供多个DBF共享BLOB数据。

如果您阅读本文档:http://cicorp.com/act/sdk/ACT6-SDK-ChapterA.htm#_Toc483994053

您可以看到REGARDING列是6个字符。描述如下:这个6字节字段由系统提供,包含对二进制大对象(BLOB)数据库中字段的引用。

现在打开*.BLB后,我可以看到块大小为64字节。所有文本块都以NULL填充到该大小。

我磕磕绊的是试图将存储在REGARDING列中的值转换为阻止BLB文件中的位置。我的假设是6个字符字段是偏移量。

例如,REGARDING的一个值是,(忽略方括号): [ ",J$]

在我的谷歌搜索中,我发现了这个:http://ulisse.elettra.trieste.it/services/doc/dbase/DBFstruct.htm#C1.5

它解释了在备注字段中(至少在普通的DBF文件中)空格值是忽略的(即它填充了列)。

因此,如果我是正确的(再次,方括号) [",J$] 应该是我的BLB文件中的偏移量。幸运的是,我仍然可以访问原始的ACT2000软件,因此我可以比较程序/ MySQL和BLB文件中的全文。

使用我的示例值,我知道REGARDING值为[ ",J$]的数据库行对应于1024字节偏移量(或16个块,假设我猜测64字节大小的块)。

我已经尝试阅读一些Python代码,用于读取DBF文件的开源项目 - 但我已经掌控了。

我认为我需要做的是将字符解包为二进制,但我不确定。

如何根据DBF文件中的内容找到基于64块的点读取?


Jerry Dodge编辑

我尝试将此字段中的字符串反向工程为十六进制值,然后使用StrToInt64将其设置为整数值,但结果仍然与blob文件不匹配。我也尝试将这个整数值乘以64而不是乘以,但是结果会在blob文件的大小之外结束,而不是实际找到任何数据。

例如,___/BD_ =空格)的值转换为$2f4244十六进制,后者又转换为3097156的整数值,但不会与blob文件中的任何相关数据部分相对应,即使乘以或除以64也是如此。

1 个答案:

答案 0 :(得分:0)

根据您链接的SDK,以下情况符合我的理解:

有一个TYPE字段(右边距REGARDING),用于编码REGARDING的用途(参见链接章节的第二个表格)。因此,我假设如果type=6(会议未举行),则REGARDING要么无关紧要,要么仅包含来自其他某个表的会议ID引用。在那条思路上,如果REGARDING(或可能是100),我只希望type=101成为BLB偏移量。我也没有放弃在这些相关案例中TYPE可能是BLB文件索引和偏移的串联的想法(因为有人提到每个文件不能超过30K字符,我真的希望能够甚至在一个表中存储更多数据。)