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

Row*_*ker 5 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值的DB行[ ",J$]对应于1024字节偏移(或16个块,假设我猜测64字节大小的块).

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

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

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


由杰里道奇编辑

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

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

Lev*_*zél 0

根据您链接的SDK,据我了解会发生以下情况:

有一个TYPE字段(右侧REGARDING)对REGARDING用途进行编码(请参阅链接章节的第二个表)。因此,我假设如果type=6(会议未举行)则REGARDING要么不相关,要么只包含来自其他表的会议 ID 引用。按照这个思路,我只期望REGARDINGBLB 偏移量为 if type=101(或可能为 100)。我也不会放弃这样的想法,在这些相关情况下,TYPE 可能是 BLB 文件索引和偏移量的串联(因为有提到每个文件不得超过 30K 字符,而且我真的希望能够存储很多即使在一张表中也有更多数据)。