2014-10-17 37 views
0

我希望比較二進制文件中特定位置的值(比如,來自索引nxi的值,其中i = 0,1,2,3 ...並且n =任意數字,說10)。 我想看看這個值是否等於另一個,比如說「m」。該值在文件中的位置始終只在n x i中。從C中的文件中讀取一個值C

我能想到的三種方法是:

  1. 我維持其中存儲的N×我的價值,我直接用FSEEK進入該指數,看看它是否等於m一個臨時變量。

  2. 我爲文件中m的值做了一個fseek。

  3. 我使用fseek在位置0,n,2n,3n等等中搜索m的值。

我不知道如何,所有這些作業的工作,但這些哪一個是最有效的關於空間和時間多久?

編輯: 這個過程是一個更大的過程的一部分,它有更多的文件,因此時間很重要。 如果除了使用fseek還有其他的方法,請告訴。

任何幫助表示讚賞。謝謝!

+1

目前還不清楚你想要做什麼以及你的數據格式。這是一種搜索嗎? – blueshift 2014-10-17 03:42:44

+0

是的。 我有一個名爲minkey的值,我想搜索文件中具有該值的位置,並從中讀取下面4個值。 – fineashell 2014-10-17 03:45:28

+0

順便說一句,爲什麼我的帖子降低了投票率?我沒有太多使用這個網站的經驗,所以請告訴我,以便在我提出其他問題時可以處理它。 – fineashell 2014-10-17 03:46:37

回答

4

沒有任何事先知道您正在搜索的文件中的值和順序,最快的方法就是線性查看文件並比較值。

這可能最好通過反覆使用fseek()來完成,但反覆調用fseek和read可能比讀取文件的大塊並在內存中查看它們要慢 - 因爲系統調用有很多開銷。

但是,如果您要對相同文件進行大量搜索,那麼建立索引和/或對記錄進行排序會更好。這樣做的一種方法是把數據與內置的索引關係數據庫(幾乎任何SQL數據庫)

編輯:

既然你知道你的文件進行排序,你可以使用一個binary search

+0

我忘了補充一點,我希望搜索的二進制文件已經排序。 – fineashell 2014-10-17 03:54:13