ホームページ >バックエンド開発 >PHPチュートリアル >メモリがファイル サイズより小さい場合、大きなファイル内の行をすばやく検索して見つけます。

メモリがファイル サイズより小さい場合、大きなファイル内の行をすばやく検索して見つけます。

WBOY
WBOYオリジナル
2016-06-23 14:18:56754ブラウズ

メモリ内の大きなファイル

たとえば、次のファイルがあります
ABC 56
DEF 100
RET 300
...

ファイルには 2 つの列があり、最初の列は繰り返しがなく、2 番目の列は数値を表します回 (単に数値として扱います))。

ファイルサイズが 2G 以上で、メモリが 1G しかない場合、「ABC 56」行をすばやく見つける方法。

より明確な解決策を教えてください。


ディスカッションへの返信 (解決策)

意味がわかりませんか?
ファイルを開いて特定の行をすばやく見つけたい場合は、vi 以降を使用してファイルを開くことができます。
その後、次のように入力します。 Enter を押すだけです

fopen を押してから fscanf を押します。
一度に 1 行ずつ読んでください。メモリが制限要因になることはありません。

誰か知っていますか?
一行ずつ読むと効率が悪いです。
もっと早い方法はありますか?
私のアイデアは、ハッシュ テーブルを構築し、ハッシュ アルゴリズムに基づいてハッシュ衝突原理を使用して重複を排除することです。
良い意見があるかどうかわかりません

ハッシュテーブルを構築したい場合、最初にファイルの内容をハッシュする必要はありませんか?

必ずしもアルゴリズムを使用する必要はなく、他のツールで処理することもできます。
たとえば、awk:
awk '/ABCt56/{print NR}' file
は、一致する行の行番号を取得できます。

銀行番号を知りたいだけなら、解決策はたくさんあります。具体的なニーズを教えてください。
しかし、他のニーズがある場合、awk のようなことを行うのは最良の解決策ではない可能性があります。

誰か知っていますか?
一行ずつ読むと効率が悪いです。
もっと早い方法はありますか?
私のアイデアは、ハッシュ テーブルを構築し、ハッシュ アルゴリズムに基づいてハッシュ衝突原理を使用して重複を排除することです。
良い意見があるかどうかわかりませんが、まず一行ずつ読んでからハッシュする必要はありませんか?

1行ずつ読むのは遅すぎると思う場合は、少しずつ読むこともできます


誰か知っていますか?
一行ずつ読むと効率が悪いです。
もっと早い方法はありますか?
私のアイデアは、ハッシュ テーブルを構築し、ハッシュ アルゴリズムに基づいてハッシュ衝突原理を使用して重複を排除することです。
良い意見があるかどうかわかりませんが、それを一行ずつ読んでからハッシュする必要はありませんか?

一行ずつ読むのが遅すぎると感じる場合は、ブロックごとに読むこともできます

はい、ブロックで読む方がニーズに適しています

元の投稿者は次を参照できます:
http://www. fantxi.com/blog/archives/php-read-large -file/

http://sjolzy.cn/php-large-file-read-operation.html

ハッシュテーブルを構築するなら、最初にファイルの内容をハッシュする必要がありますか?

必ずしもアルゴリズムを使用する必要はなく、他のツールで処理することもできます。
たとえば、awk:
awk '/ABCt56/{print NR}' file
は、一致する行の行番号を取得できます。

銀行番号を知りたいだけなら、解決策はたくさんあります。具体的なニーズを教えてください。
しかし、他のニーズがある場合、awk のようなことを行うのは最良の解決策ではない可能性があります。

必要なのは、それを素早く見つける方法ですか?例えば、ABCの後の数字やDEFの後の数字が知りたいのですが…


知っている人はいますか?
一行ずつ読むと効率が悪いです。
もっと早い方法はありますか?
私のアイデアは、ハッシュ テーブルを構築し、ハッシュ アルゴリズムに基づいてハッシュ衝突原理を使用して重複を排除することです。
良い意見があるかどうかわかりませんが、まず一行ずつ読んでからハッシュする必要はありませんか?

一行ずつ読むのは遅すぎると思う場合は、少しずつ読んでも構いません

記憶を少しずつ読むにはどうすればよいですか?例を挙げていただけますか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。