Frage

Ich bin beschäftigt mit einem Klasse-Programmierung, die einen Index aus einer Textdatei ASCII / BINARY erstellt. Mein Problem ist, dass ich nicht wirklich wissen, wie ich anfangen soll. Ich hatte schon einige versucht, aber keiner war wirklich gut für mich. Ich brauche nicht die Adresse der Datei über die MFT zu finden. Sie einfach die Datei geladen und durch die Suche nach dem Schlüssel im Index-Datei und ging in der Textdatei an die Adresse Sachen viel schneller zu finden, es zeigt.

Die Index-Datei aufgebaut werden soll, wie folgt:

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 bisschen besser. Dank!

War es hilfreich?

Lösung

Es scheint mir, dass alle Ihre Klasse ein Array von Zeigern tun muss, ist, zu speichern oder Datei-Offsets zu den wichtigsten Standorten in der Datei starten.

Es hängt wirklich davon ab, was Ihre Key Standorten vertreten.

Ich würde vorschlagen, dass Sie die Datei durch Ihre Klasse zugreifen einige öffentliche Methoden. Sie können dann geschrieben leichter mit den Daten in Schlüsselstellen binden.

Zum Beispiel Ihre Key Standorte sein kann, wo jeder neue Datenblock in die Datei geschrieben von startet. z.B. ersten Blocks 1000 Bytes, Schlüssel Stelle 0; zweiten Blocks 2500 Bytes, Schlüsselstelle 1000 ist; dritter Block 550 Byte; Schlüsselstelle 3500; der nächste Block 4050 alle sein wird, unter der Annahme, dass 0 ist das erste Byte.

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

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 ist durch die Daten zu dem Schritt, bis das Schlüsselzeichen befindet, die Anzahl der Zeichen zu zählen geprüft, wie Sie gehen. Die Zählung wird dann verwendet, um Ihre Schlüsselposition zu erzeugen.

Andere Tipps

Ihre Code-Snippet nicht so viel von einer Idee ist, da es die Funktionalität Sie wollen am Ende haben.

Erkennen Sie, dass „Indizierung“ lediglich bedeutet „Erinnern“, wo die Dinge befinden. Sie können dies unter Verwendung eines beliebigen Datenstruktur erreichen Sie wünschen ... B-Baum, Rot / Schwarz Baum, BST, oder erweiterte Strukturen wie Suffix Bäume / Suffixarray.

Ich empfehle Ihnen, solche Datenstrukturen zu suchen.

edit:

mit den neuen Informationen, würde ich vorschlagen, eine eigene Schlüssel / Wert-Lookup zu machen. Erstellen Sie eine Reihe von Schlüsseln und ihren Werten assoziieren irgendwie. dies kann eine Klasse oder Struktur bedeuten bauen, die sowohl den Schlüssel und den Wert enthält, oder stattdessen enthält den Schlüssel und einen Zeiger auf eine Struktur oder Klasse mit einem Wert, etc.

Sobald Sie dies getan haben, sortieren Sie die Tastenanordnung. Nun, Sie haben die Möglichkeit, eine binäre Suche auf den Tasten zu tun, um den entsprechenden Wert für einen bestimmten Schlüssel zu finden.

Sie könnten eine Hash-Tabelle auf ähnliche Weise aufzubauen. Sie könnten eine BST oder eine ähnliche Struktur aufbauen, wie ich bereits erwähnt.

Ich verstehe immer noch nicht wirklich die Frage (die Arbeit an Ihrer Frage zu stellen skillz), aber soweit ich dem Algorithmus sagen kann, wird sein:

  1. scannen Sie die Datei linear, der erste Wert auf das erste Komma nach oben ( ‚‘) ist ein Schlüssel, wahrscheinlich. Alle anderen Tasten auftreten, wo ein ‚;‘ auftritt, bis zum nächsten ‚‘ (man könnte Zeilenumbrüche hier überspringen müssen). Wenn es sich um eine Hausaufgabe ist, benutzen Sie einfach scanf () oder etwas, um den Schlüssel zu lesen.
  2. Ausdruck der Schlüssel und Byte-Position Sie es an zu Ihrer Indexdatei gefunden

AFAIUI, dass der Algorithmus ist, sehe ich nicht wirklich das Problem hier?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top