2016-11-12 6 views
0

パイプでファイルを区切るスクリプトを作成する必要があります。メモリRAMを使用せずにバイナリ検索でどうしたらいいですか?RAMメモリを使用せずにPHPでバイナリ検索でテキストファイルを読む

私が試した:

$handle = fopen("myfile.txt", "r"); 
if ($handle) { 
    while (($line = fgets($handle)) !== false) { 
     // while reads line make binary search 
    } 

    fclose($handle); 
} else { 
    // error opening the file. 
} 

myfile.txtの

Name|Title|Andrew|TheBook1|July|TheChest|Carol|OneTime 
+0

( 'yield')は、[ここ](http://php.net/manual/en/language.generators.overview.php)を参照してください。降伏線はメモリ占有量が少ない。 – Xorifelse

+0

@ Xorifelse、ここでは 'yield'はどのように役立つのでしょうか? '$ line'は各反復で上書きされます。 –

+0

バイナリ検索とはどういう意味ですか?あなたは何を探していますか?あなたは、ラインの中で検索しているのですか、ファイル全体ですか? – RiggsFolly

答えて

1

、私はあなたにいくつかのヒント/ステップを与えるでしょう、あなたはそれらを実装する方法を見つけ出す:)

  1. バイナリサーチアルゴリズムはブロックに検索を分割します。各ステップで、要素を含むブロックを半分に切ります。だからこそ、それは非常に速いです。
  2. あなたのデータはアルファベット順に並べる必要があります。演習では、メモリを使わずにバイナリ検索を実装する必要があると言います。データを注文するためにメモリを使用できないとは言いません。その文字列を "|"で爆発させ、それをアルファベット順に並べ、再び爆音してください。あなたはあなたにストリングを注文しました。
  3. 実際のアルゴリズムではメモリを使うことができないので、ファイルシステムだけで作業する必要があります。
  4. あなたが検索しているブロックがどこから始まりフィンランドになっているかを知る必要があります。
  5. 変数をメモリ内で使用することが許可されているかどうかわかりません。そうでない場合は、変数もファイルに書き込む必要があります。
  6. その場合、ファイルから値を読み書きするgetBlockStart()、getBlockEnd()、setBlockStart、setBlockEnd()などの関数を記述します。
  7. アルゴリズムをblockStart = <first element>, blockEnd = <lastELement>
  8. で2つに分けて、どの要素がアルファベット順に基づいているかを調べてください。
  9. 10日をチェックアウトするには、ファイルの10個の要素を読みます。あなたがそれに達する方法。
  10. 探している要素が見つかるまで繰り返します。
1

をあなたが区切り文字としてパイプラインを使用するstream_get_lineを使用することができます。その宿題以来

while (($name = stream_get_line($handle, 0, '|')) !== false) { 
    // if ($name == 'Carol') { ... 
} 
+0

しかし、私はまだバイナリ検索アルゴリズムを使用する必要があります –

関連する問題