我正在尝试将数据从 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 字节大小的块)。
我已经尝试阅读一些用于读取 DBF 文件的开源项目的 Python 代码——但我无法理解。
我认为我需要做的是将字符解压缩为二进制文件,但不确定。
如何根据DBF
文件中的内容找到要读取的基于 64 块的点?
由杰里道奇编辑
我试图将此字段中的字符串反向工程为十六进制值,然后使用 为整数值StrToInt64
,但结果仍然与 blob 文件不匹配。我也尝试将这个整数值乘以 64 而不是相乘,但结果总是超出 blob 文件的大小,实际上没有找到任何数据。
例如,___/BD
( _
=space) 的值转换为$2f4244
十六进制,而十六进制又转换为 的整数值3097156
,但与 blob 文件中数据的任何相关部分都不对应,即使乘以或除以 64 时也是如此。