在記憶體儲器小於檔案大小的情況下,大檔案中快速尋找定位一行

來源:互聯網
上載者:User
在記憶體小於檔案大小的情況下,大檔案中快速尋找定位一行
比如有一個檔案
ABC 56
DEF 100
RET 300
...

檔案有2列,第一列都是不重複的,第2列表示次數(當成一個數字就行了)。

如果檔案大小為2G或者更大,記憶體只有1G的情況,如何快速定位到“ABC 56” 這一行。

請大拿們給個清晰點的解決方案。

記憶體 大檔案

分享到:


------解決方案--------------------
fopen,再fscanf。
一次讀一行就好啊。記憶體不會成為限制因素的。
------解決方案--------------------
建hash表的話,豈不是要先對檔案的內容進行hash?

可以用其他的工具來處理,未必一定要用演算法。
比如awk:
awk '/ABC\t56/{ print NR}' file
可以擷取匹配行的行號。

建議lz說下具體的需求,如果僅僅是擷取行號的話,方案很多。
但是如果還有其他需求的話,類似awk這麼做未必是最佳方案。
------解決方案--------------------
引用:
Quote: 引用:

有沒有人知道啊?
如果是一行一行讀,那效率就不行啦。
還有沒有更快速的方法呢?
我的思路是建一張雜湊表,然後根據雜湊演算法,再用那個雜湊碰撞的原理去排重。
不知道各位有什麼好的意見沒
那你不也得先一行一行讀出來再雜湊嗎?

嫌一行一行讀太慢,可以一塊一塊讀


是的讀塊 比較符合你的需求
------解決方案--------------------
樓主可參考:
http://www.fantxi.com/blog/archives/php-read-large-file/

http://sjolzy.cn/php-large-file-read-operation.html
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.