2

テキスト ファイルの ASCII/BINARY からインデックスを作成するクラスのプログラミングで忙しくしています。私の問題は、どうやって始めたらいいのかわからないことです。すでにいくつか試してみましたが、どれもうまくいきませんでした。MFT を介してファイルのアドレスを見つける必要はありません。ファイルを読み込んで、インデックス ファイル内のキーを検索し、テキスト ファイル内の表示されるアドレスに移動するだけで、はるかに高速に検索できます。

インデックス ファイルは次のように作成する必要があります。

KEY        ADDRESS  
  1        0xABCDEF    
  2        0xFEDCBA    
  .           .  
  .           .  

次の例の値を含むテキスト ファイルがあります。

1, 8752 FW,
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++, 
******************************************************************************, 
------------------------------------------------------------------------------;

これが私の質問をもう少しよく説明することを願っています。ありがとう!

4

3 に答える 3

1

クラスが行う必要があるのは、ファイル内のキー位置へのポインターの配列またはファイル開始オフセットを格納することだけであるように思われます。

それは本当にあなたの主要な場所が何を表すかに依存します。

いくつかのパブリックメソッドを使用して、クラスからファイルにアクセスすることをお勧めします。そうすれば、書き込まれたデータを使用して主要な場所をより簡単に結び付けることができます。

たとえば、キーの場所は、ファイルに書き込まれる新しいデータブロックが開始する場所である可能性があります。たとえば、最初のブロックは1000バイト、キーの場所は0です。2番目のブロック2500バイト、キーの場所1000; 3番目のブロック550バイト。キーロケーション3500; 次のブロックは、0が最初のバイトであると仮定してすべて4050になります。

キー値を可変長配列に格納すると、データブロックの開始点を簡単に取得できます。

キーポイントが何らかのキー文字で示されている場合は、同じクラスを使用できますが、キー値が格納されている場所を格納するためにわずかな変更が加えられています。最も簡単な方法は、キー文字が見つかるまでデータをステップ実行し、チェックされる文字の数を数えることです。カウントは、キーの場所を生成するために使用されます。

于 2009-07-01T14:15:38.580 に答える
1

コード スニペットはアイデアではなく、最終的に必要な機能です。

「索引付け」とは、物がどこにあるかを「記憶する」ことを意味するだけであることを認識してください。これは、任意のデータ構造を使用して実現できます... B ツリー、赤/黒ツリー、BST、または接尾辞ツリー/接尾辞配列などのより高度な構造。

そのようなデータ構造を調べることをお勧めします。

編集:

新しい情報を使用して、独自のキー/値ルックアップを作成することをお勧めします。キーの配列を作成し、何らかの方法でそれらの値を関連付けます。これは、キーと値の両方を含むクラスまたは構造体を構築すること、またはキーと値を持つ構造体またはクラスへのポインターを含むクラスまたは構造体を構築することを意味する場合があります。

これが完了したら、キー配列をソートします。これで、キーに対してバイナリ検索を実行して、特定のキーの適切な値を見つけることができるようになりました。

同様の方法でハッシュ テーブルを作成できます。前述のように、BST または同様の構造を構築できます。

于 2009-06-22T17:26:19.560 に答える
0

私はまだ質問を本当に理解していません(skillzを尋ねる質問に取り組んでください)が、私が知る限り、アルゴリズムは次のようになります。

  1. ファイルを線形にスキャンします。最初のコンマ (',') までの最初の値がキーです。他のすべてのキーは、';' のどこにでも発生します。次の ',' まで発生します (ここで改行をスキップする必要がある場合があります)。宿題の場合は、 scanf() などを使用してキーを読み取ります。
  2. 見つけたキーとバイト位置をインデックスファイルに出力します

AFAIUI はアルゴリズムですが、ここで問題が発生することはありませんか?

于 2009-06-24T07:52:52.453 に答える