我試圖想到一種有效的方式來讀取具有數千行的文件。每行以關鍵字開頭。我想閱讀關鍵字,如果它滿足一些條件(如atoi(關鍵字)> 5),然後我讀整行,否則去下一行。用關鍵字解析C++文件
有沒有這樣做的有效方式?除非滿足關鍵字標準(每行很大),否則我不想閱讀和分割每一行。我只能訪問標準庫功能。
我試圖想到一種有效的方式來讀取具有數千行的文件。每行以關鍵字開頭。我想閱讀關鍵字,如果它滿足一些條件(如atoi(關鍵字)> 5),然後我讀整行,否則去下一行。用關鍵字解析C++文件
有沒有這樣做的有效方式?除非滿足關鍵字標準(每行很大),否則我不想閱讀和分割每一行。我只能訪問標準庫功能。
你基本上別無選擇,只能閱讀整行 - 一行延伸到下一個換行符,所以如果不讀取字符,就無法識別一行和下一行開始的位置。
如果您有一些離線預處理功能,您可以對文件進行預先索引以查找每行的開頭,以便您可以讀取行的開頭,並且如果不符合您的要求標準,直接尋找下一行的開頭。這增加了整體帶寬的使用,但它可以提高速度。
根據你的意思是一條巨大的線條,它可能沒有太多(如果有的話)真正的好處。如果「巨大」意味着幾兆字節,它可能會幫助很多。如果「巨大」意味着數百甚至幾千字節,那麼它可能比讀取所有數據要慢。
以簡短的方式(比如說1KB)加以說明並加以澄清,你仍然可以更好地閱讀它。這裏最大的成本是系統調用,所以你應該儘量減少這些 - 閱讀大塊。 – BitWhistler
最快的方法是閱讀每個字符,尋找一行的結尾,當你找到一個字符時,然後開始你的關鍵字邏輯。沒有一種方法可以在不讀取每個字符的情況下簡單地跳到文件中的下一行。
通過使用mmap打開文件,然後使用memchr搜索行結束符,您可以最大化搜索新行的速度。
不要在問題中加上敬意或問題,對於問題 –