質問

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

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

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

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

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

これで私の質問が少し良くなることを願っています。 ありがとう!

役に立ちましたか?

解決

あなたのクラスがする必要があるのは、ファイル内のキーの場所へのポインタの配列またはファイル開始オフセットを保存することだけであるように思えます。

キーの場所が何を表すかに大きく依存します。

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

たとえば、キーの場所は、ファイルに書き込まれる各新しいデータブロックの開始位置です。例えば最初のブロック1000バイト、キーの場所0。 2番目のブロック2500バイト、キーの場所1000。 3番目のブロック550バイト。キーの場所3500。次のブロックは4050になり、すべて0が最初のバイトであると想定されます。

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

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

他のヒント

あなたのコードスニペットは、あなたが最後に持ちたい機能であるため、あまりアイデアではありません。

" indexing"を認識する単に「記憶する」ことを意味します。物が置かれている場所。これは、Bツリー、赤/黒ツリー、BST、または接尾辞ツリー/接尾辞配列などのより高度な構造の任意のデータ構造を使用して実現できます。

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

編集:

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

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

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

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

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

AFAIUIがアルゴリズムです。実際に問題はここに表示されませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top