2009-06-22 73 views
2

我忙於編寫一個類,該類創建一個文本文件ASCII/BINARY索引。 我的問題是我真的不知道如何開始。我已經有一些嘗試,但沒有一個對我來說真的很好。 我不需要通過MFT找到文件的地址。只需加載文件並通過在索引文件中搜索關鍵字並將文本文件導入其顯示的地址來更快地找到內容。製作索引創建類

的索引文件,應建立如下:

KEY  ADDRESS 
    1  0xABCDEF  
    2  0xFEDCBA  
    .   . 
    .   . 

我們有一個文本文件,下面的例子值:

1, 8752 FW, 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++, 
******************************************************************************, 
------------------------------------------------------------------------------; 

我希望這說明我的問題有點更好。 謝謝!

+1

請澄清您的要求。你是否想要一個書索引中的索引?什麼是索引方向,如(流內的ascii /位置的行號)? – 2009-06-22 17:43:34

+0

不過,我不能輸入連同那無法真正涉及到一些東西十六進制值涉及到輸出...你要打印鍵(字符?)。 – 2009-06-22 20:40:09

回答

1

在我看來,你所有的類需要做的是將一個指針或文件起始偏移量數組存儲到文件中的關鍵位置。

這實際上取決於您的關鍵位置代表什麼。

我建議你通過你的類使用一些公共方法來訪問文件。然後,您可以更輕鬆地將密鑰位置與寫入的數據綁定。

例如,你的關鍵位置可能是其中寫入了文件中的每個新的數據塊的開始。例如第一塊1000字節,密鑰位置0;第二塊2500字節,密鑰位置1000;第三塊550字節;關鍵位置3500;假設0是第一個字節,下一個塊將是4050。

儲存於可變長度數組和密鑰值,則可以很容易地檢索的數據塊的起點。

如果你的關鍵點是由一些關鍵字符標誌着那麼你可以使用相同的類,但存儲的微小變化,其中關鍵值存儲。最簡單的方法是遍歷數據,直到找到關鍵字符,然後統計檢查到的字符數。計數然後用於產生您的關鍵位置。

1

你的代碼片段並不是一個想法,因爲它是你希望在最後得到的功能。

認識到「索引」僅僅意味着「記住」事物所在的位置。您可以使用任何您希望的數據結構來完成此操作... B-Tree,紅/黑樹,BST或更高級的結構,如後綴樹/後綴數組。

我建議你看看這樣的數據結構。

編輯:

與新的信息,我建議讓自己的鍵/值查找。構建一個鍵數組,並以某種方式關聯它們的值。這可能意味着構建一個包含鍵和值的類或結構,或者代之以包含鍵和指向具有值的結構或類的指針等。

一旦完成此操作,就會對鍵陣列進行排序。現在,您可以對鍵進行二進制搜索以找到給定鍵的適當值。

你可以用類似的方式建立一個哈希表。你可以像我之前提到的那樣構建BST或類似的結構。

0

我還是真的不明白的問題(你的問題問的skillz工作),但據我可以告訴算法是:

  1. 掃描文件線性,第一價值高達第一個逗號(',')可能是一個關鍵。所有其他密鑰出現在任何';'發生,直到下一個','(你可能需要在這裏跳過換行符)。如果這是一項家庭作業,只需使用scanf()或其他東西來讀取密鑰。
  2. 打印出來的密鑰和字節位置,你發現它在你的索引文件

AFAIUI是這樣的算法,我實在不明白這裏的問題?