-2

TWriterクラスを使用してblobにさまざまな情報を書き込んでいるコンポーネントがあります。問題は、一部のBLOBが誤ってBLOBに(または別のデータシーケンスの下で)保存されていることです。これらのエラーを何らかの方法で修正する必要があります。WriteListBeginまたはWriteListEndを予期していて、EReadError "Invalid property value"を取得すると、問題が発生します。ストリームをバイトごとに読み取り、これらのセパレーターがどこにあるかを知ることを考えています。WriteListBeginまたはWriteListEndが発生していることをどのように知ることができますか?

LE:コメントが示唆するように、この問題を簡単に解決することはできません。ベンダーがわからないので、詳細はお伺いできません。TWriterメカニズムの背後にあるものに関しては、これは次のアセンブリルーチンですが、どのバイトがどのバイトとして書き込むのかわかりません。

ライターオブジェクトに関連付けられたストリームへのリストの開始マーカー

プロシージャTWriter.Write(const Buf;カウント:Longint); アセンブラ;

おそらく、偽のストリームを修正するために、独自のカスタムTReaderを書き始めます。

4

2 に答える 2

1

私があなたの質問をうまく解明したなら、あなたが壊れたデータを持っていることを理解しています。それは明らかに、それ自体が正しく解析されないようにします。具体的には、リストの開始マークと終了マークが欠落しているか、順序が間違っているか、場所が間違っています。

私はそれを修正するための4つの解決策を考えることができます:

  1. データが破損していないことを確認してください(サプライヤに問い合わせてください)。
  2. データを手動で修正します(妥当なサイズ内の場合)。
  3. 独自のカスタムパーサーを作成してマーキングを自動的に修正し、事前に使用します。
  4. TWriterすべての行に、を使用します。現在の行を記憶Positionし、現在の行を確認し、破損した場合はその行を書き換え、置換、または無視し、必要に応じて古い位置に戻します。

同じ方法で複数のデータチャンクが破損している場合は、部分的な手動調査(2)により、すぐにカスタムパーサー(3)が作成される可能性があります。

于 2013-03-25T22:22:24.503 に答える
0

リーダーまでデータ型を読み取ることで問題を解決しました。ほとんどのBLOBのEndOfListセパレータ。

特に-1のすべてに感謝します

于 2013-03-26T13:39:22.927 に答える