2009-06-22 17 views
2

Ich bin beschäftigt mit der Programmierung einer Klasse, die einen Index aus einer Textdatei ASCII/BINARY erstellt. Mein Problem ist, dass ich nicht wirklich anfangen kann. Ich hatte schon einige Versuche, aber keiner hat wirklich gut für mich funktioniert. Ich brauche nicht die Adresse der Datei über die MFT zu finden. Laden Sie einfach die Datei und suchen Sie viel schneller, indem Sie nach dem Schlüssel in der Indexdatei suchen und die Textdatei an die angezeigte Adresse senden. Erstellen einer indexerstellenden Klasse

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

Wir haben eine Textdatei mit dem folgenden Beispiel Wert

:

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

Ich hoffe, dass dies erklärt, meine Frage ein wenig

sollte der Index-Datei wie folgt aufgebaut werden besser. Danke!

+1

Bitte klären Sie Ihre Anforderungen. Möchten Sie einen Index wie in einem Buchindex? Wie lauten die indizierten Richtungen (Zeilennummer für ASCII/Position im Stream)? –

+0

Noch kann ich die Eingabe nicht auf die Ausgabe beziehen ... Sie drucken Tasten (Zeichen?) Zusammen mit einem Hex-Wert, der nicht wirklich mit irgendetwas in Verbindung gebracht werden kann. –

+0

OK ... vor allem bauen wir eine Random-Datei mit diesem Zeug drin: 1, 8752 FW, ++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++, ************************ ************************************************** *, ------------------------------------------------ ------------------------------; Wir schreiben es in eine Textdatei und erzeugen dann einen Index, der anzeigt, wo in dieser Datei ein Schlüssel zu finden ist. Schlüssel: 1 – shevron

Antwort

1

Es scheint mir, dass Ihre Klasse nur ein Array von Zeigern oder Dateianfangsversätzen an den Schlüsselpositionen in der Datei speichern muss.

Es hängt wirklich davon ab, was Ihre Schlüsselpositionen darstellen.

Ich würde vorschlagen, dass Sie die Datei über Ihre Klasse mit einigen öffentlichen Methoden zugreifen. Sie können dann Schlüsselpositionen leichter mit den geschriebenen Daten verknüpfen.

Zum Beispiel Ihre Key Standorte sein kann, wo jeder neue Datenblock in die Datei geschrieben von startet. z.B. erster Block 1000 Byte, Schlüsselstelle 0; zweiter Block 2500 Bytes, Schlüsselstelle 1000; dritter Block 550 Bytes; Schlüsselposition 3500; Der nächste Block wird 4050 sein, vorausgesetzt, dass 0 das erste Byte ist.

Speichern Sie die Schlüsselwerte in einer variablen Länge Array und dann können Sie leicht den Ausgangspunkt für einen Datenblock abzurufen.

Wenn Ihr Schlüsselpunkt durch ein Schlüsselzeichen bezeichnet wird, dann können Sie die gleiche Klasse verwenden, aber mit einer leichten Änderung zu speichern, in dem der Schlüsselwert gespeichert ist. Der einfachste Weg besteht darin, die Daten so lange zu durchlaufen, bis sich das Schlüsselzeichen befindet, und dabei die Anzahl der Zeichen zu zählen, die Sie während des Vorgangs überprüfen. Die Zählung wird dann verwendet, um Ihren Schlüsselstandort zu erstellen.

1

Ihr Code-Snippet ist nicht so sehr eine Idee, sondern die Funktionalität, die Sie am Ende haben möchten.

Erkenne, dass "Indexieren" lediglich "sich erinnern" bedeutet, wo sich die Dinge befinden. Sie können dies mit jeder gewünschten Datenstruktur erreichen ... B-Baum, Rot/Schwarz-Baum, BST oder erweiterte Strukturen wie Suffixbäume/Suffix-Arrays.

Ich empfehle Ihnen, solche Datenstrukturen zu untersuchen.

edit:

mit den neuen Informationen, würde ich vorschlagen, eine eigene Schlüssel/Wert-Lookup zu machen. Erstellen Sie ein Array von Schlüsseln und ordnen Sie deren Werte irgendwie zu. Dies kann bedeuten, dass eine Klasse oder Struktur erstellt wird, die sowohl den Schlüssel als auch den Wert enthält oder stattdessen den Schlüssel und einen Zeiger auf eine Struktur oder Klasse mit einem Wert usw. enthält.

Sobald Sie dies getan haben, sortieren Sie das Schlüssel-Array . Jetzt haben Sie die Möglichkeit, eine binäre Suche nach den Schlüsseln durchzuführen, um den passenden Wert für einen bestimmten Schlüssel zu finden.

Sie könnten eine Hash-Tabelle in ähnlicher Weise erstellen. Sie könnten eine BST oder eine ähnliche Struktur wie ich zuvor erwähnt bauen.

+0

(Arbeiten an der gleichen Aufgabe). Es muss nicht so kompliziert sein. Das einzige, was gespeichert werden muss, ist der Schlüssel + der Offset des Datensatzes in einer anderen Datei. – Ikke

+0

Ja richtig ... es ist ein bisschen zu kompliziert für unsere Aufgabe. ;) Aber tatsächlich ist es interessant! Vielleicht werde ich es später in einigen Programmen verwenden. – shevron

0

ich wirklich noch nicht die Frage verstehen (Arbeit an Ihrer Frage zu stellen skillz), aber soweit ich der Algorithmus sein kann sagen:

  1. die Datei linear scannen, um den ersten Wert bis zu das erste Komma (',') ist wahrscheinlich ein Schlüssel. Alle anderen Schlüssel kommen überall dort vor, wo ein ';' tritt auf bis zum nächsten ',' (Sie müssen hier möglicherweise Zeilenumbrüche überspringen). Wenn es eine Hausaufgabe ist, benutze einfach scanf() oder etwas, um den Schlüssel zu lesen.
  2. Ausdruck der Schlüssel und Byte-Position gefunden Sie es zu Ihrem Index

AFAIUI-Datei, die der Algorithmus ist, sehe ich hier nicht wirklich das Problem?

Verwandte Themen