5

Act 2000 から MySQL データベースにデータを変換しようとしています。DBF ファイルを個々の MySQL テーブルに正常にインポートしました。しかし*.BLB、標準外のメモ ファイルと思われるファイルに問題があります。

DBF ファイルは、自分自身を dbase III Plus、No memo 形式として識別します。*.BLB複数の DBF が BLOB データを共有するためのメモ ファイルが1 つあります。

このドキュメントを読んだ場合: http://cicorp.com/act/sdk/ACT6-SDK-ChapterA.htm#_Toc483994053 )

REGARDING列が 6 文字の列であることがわかります。説明は次のとおりです。この 6 バイトのフィールドはシステムによって提供され、バイナリ ラージ オブジェクト (BLOB) データベース内のフィールドへの参照が含まれています

開く*.BLBと、ブロック サイズが 64 バイトであることがわかります。テキストのすべてのブロックは、そのサイズまで NULL で埋められます。

私がつまずいているのは、REGARDING 列に格納されている値を BLB ファイル内のブロックの場所に変換しようとしていることです。私の仮定は、6 文字のフィールドがオフセットであるということです。

たとえば、REGARDING の 1 つの値は次のとおりです (角かっこは無視します)。 [ ",J$]

私のグーグルで、私はこれを見つけました: http://ulisse.elettra.trieste.it/services/doc/dbase/DBFstruct.htm#C1.5

メモ フィールド (少なくとも通常の DBF ファイル) では、スペースの値が無視される (つまり、列がパディングされている) ことを説明しています。

したがって、私が正しければ (ここでも、角括弧)[",J$]が BLB ファイルのオフセットになるはずです。幸いなことに、元の ACT2000 ソフトウェアにまだアクセスできるので、プログラム / MySQL と BLB ファイルの全文を比較できます。

私の例の値を使用すると、REGARDING値がの DB 行が[ ",J$]1024 バイトのオフセット (または 64 バイト サイズのブロックであると仮定すると、16 ブロック) に対応することがわかります。

DBF ファイルを読み取るオープン ソース プロジェクトの Python コードをいくつか読み取ろうとしましたが、頭がいっぱいです。

私がする必要があるのは、文字をバイナリに解凍することだと思いますが、よくわかりません。

DBFファイルで見つかったものに基づいて、読み取る 64 ブロック ベースのスポットを見つけるにはどうすればよいですか?


ジェリー・ドッジによる編集

このフィールドの文字列を 16 進数値にリバース エンジニアリングしてから、 を使用して整数値に変換しようとしましたStrToInt64が、結果はまだ BLOB ファイルと一致しません。また、この整数値に 64 を掛けてみましたが、掛け算はしませんでしたが、結果は BLOB ファイルのサイズを超えてしまい、実際にはデータが見つかりませんでした。

たとえば、___/BD( _= スペース)の値は$2f424416 進数に変換され、これは の整数値に変換され3097156ますが、64 で乗算または除算しても、BLOB ファイル内のデータの関連部分には対応しません。

4

1 に答える 1

0

リンクしたSDKによると、私が理解しているように、次のことが起こります。

何に使用されるかをエンコードするTYPEフィールド (right behing )があります (リンクされた章の 2 番目の表を参照)。したがって、 (会議が開催されていない場合)は無関係であるか、他のテーブルからの会議 ID 参照のみが含まれていると思います。その考えでは、BLB オフセット(またはおそらく 100)であるとのみ期待します。また、これらの関連するケースでは、TYPE が BLB ファイル インデックスとオフセットの連結である可能性があるという考えも放棄しません (各ファイルは 30K 文字を超えてはならないという言及があり、多くのファイルを保存できると期待しているからです)。 1 つのテーブルでもより多くのデータ)。REGARDINGREGARDINGtype=6REGARDINGREGARDINGtype=101

于 2014-05-02T13:53:13.180 に答える