我正在尝试将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也是如此.
根据您链接的SDK,据我了解会发生以下情况:
有一个TYPE
字段(右侧REGARDING
)对REGARDING
用途进行编码(请参阅链接章节的第二个表)。因此,我假设如果type=6
(会议未举行)则REGARDING
要么不相关,要么只包含来自其他表的会议 ID 引用。按照这个思路,我只期望REGARDING
BLB 偏移量为 if type=101
(或可能为 100)。我也不会放弃这样的想法,在这些相关情况下,TYPE 可能是 BLB 文件索引和偏移量的串联(因为有提到每个文件不得超过 30K 字符,而且我真的希望能够存储很多即使在一张表中也有更多数据)。
归档时间: |
|
查看次数: |
1401 次 |
最近记录: |