2009-10-13 7 views
0

Les dictionnaires ont généralement un index et un fichier de données. J'écris une application de dictionnaire comme un projet de passe-temps. Je suis confus sur la façon de lire le fichier offset dans .NET. Le fichier d'index a une taille de 4-5 Mo. Quel est le moyen le plus efficace d'extraire la valeur de décalage/longueur d'un mot?Manière efficace de lire le fichier d'index dans .NET

EDIT: J'ai besoin de savoir seulement comment lire le fichier de décalage si j'ai un mot à rechercher. c'est-à-dire comment rechercher un mot dans le fichier d'index pour obtenir les 8 octets suivants

+0

Comment les mots sont-ils stockés dans le dictionnaire? – rslite

+0

mots sont stockés sous forme de flux de caractères ASCII que je peux lire si j'ai le décalage et commencer. J'ai besoin de savoir comment rechercher un mot dans le fichier d'index afin que je puisse obtenir les 8 octets suivants – blitzkriegz

Répondre

2

4-5 mégaoctets pour l'index? Ce n'est rien. Lisez le tout dans un tableau d'octets et avec lui en tant que MemoryStream ou mieux, parsez le contenu entier dans des structures de données appropriées pour une recherche rapide (has, b-tree, etc).

+0

je ne peux pas l'analyser à moins que je connaisse la clé de recherche. Que faire? Je dois rechercher toutes les données 5MB chaque fois que j'ai besoin d'un mot. puis prendre le décalage et la longueur des octets suivants et extraire du fichier de données réel? Mais comment gérer les clés de recherche qui correspondent aux sous-chaînes d'un mot dans le fichier d'index? – blitzkriegz

+0

Analyser le dictionnaire, pas l'index. Le dictionnaire est entièrement la bonne taille à lire dans un tableau/flux de mémoire. Une fois que vous avez analysé le dictionnaire, vous pouvez le mettre sous une forme plus acceptable. Notez que si le format ou le contenu du dictionnaire change, c'est quelque chose que vous faites exactement une fois. – plinth

3

Stream.Seek(long offset, SeekOrigin origin) sera utile pour obtenir le décalage.

0

System.IO.BinaryReader possède une méthode ReadUInt32 qui lit un int non signé. Il a également différentes méthodes pour lire les fichiers binaires.

Questions connexes