gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:56:30 26 4
gpt4 key购买 nike

我正在尝试将数据从 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 ( _ = 空格) 转换为 $2f4244十六进制,反过来转换为 3097156 的整数值,但与 blob 文件中的任何相关数据部分都不对应,即使乘以或除以 64 也是如此。

最佳答案

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

有一个TYPE字段(右侧 REGARDING )编码什么 REGARDING用于(参见链接章节的第二个表格)。所以我假设如果 type=6 ( session 未召开)REGARDING要么不相关,要么只包含来自某个其他表的 session ID 引用。在这个思路上,我只期待 REGARDING如果 type=101,则为 BLB 偏移量(或可能是 100)。我也不会放弃在这些相关情况下 TYPE 可能是 BLB 文件索引和偏移量的串联的想法(因为提到每个文件不得超过 30K 个字符,我真的希望能够存储很多即使在一张表中也有更多数据)。

关于dbase - 如何从 ACT 读取非标准 DBF 备忘录 (BLOB) 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10810953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com