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