2010-06-30 7 views
0

Je parcours un fichier texte ligne par ligne en ajustant le texte afin que le fichier corresponde finalement à la syntaxe requise pour être exécuté sur un simulateur MIPS (MARS). Mon problème est que chaque fois que je vois une ligne avec la chaîne "blezl", je veux faire plusieurs choses. Je dois d'abord insérer quelques lignes de texte en suivant la ligne contenant ce mot. C'est assez facile en utilisant insert. Je dois ensuite insérer quelques lignes de texte après la ligne qui a suivi la ligne trouvée. Le problème est que je dois ensuite rechercher dans le document entier une chaîne qui se trouvait à la fin de la chaîne trouvée, puis insérer quelques lignes avant les lignes contenant la 2ème chaîne trouvée. Alors ..Édition de texte Question

#1 blezl v0,#10 
    #2 addu s1,s0,s5 
    #3 lw v1,0(s8) 
    ... 
    #10 addu s1,s0,s5 

Je dois trouver "blezl", puis insérer quelques lignes entre "# 1" et "# 2". Ensuite, j'insère quelques lignes entre "# 2" et "# 3", puis je dois rechercher le document entier pour "# 10" et quand j'en trouve un, j'insère quelques lignes avant. Le problème est que la dernière étape nécessite que je recherche l'ensemble du document (au milieu de la traversée ligne par ligne jusqu'à trouver blezl). C'est parce que "# 10" pourrait se produire n'importe où avant ou après "# 1". Cela va prendre une éternité (il y a 80k lignes dans mon fichier et probablement environ 2% d'entre elles ont "blezl" dedans.) Comment est-ce que je peux faire ceci sans l'étape redondante massive?

Répondre

0

Les lignes 80k ne sont pas assez grandes pour que vous ne puissiez pas les charger dans la RAM. Les recherches sont assez rapides une fois que vous avez des données dans RAM.

Si vous êtes préoccupé par les performances, vous pouvez créer un b-tree pour stocker les lignes en fonction de l'étiquette. Cela vous donnera log (n) temps de recherche pour chaque ligne que vous devez trouver.

+0

Je pense peut-être remplir une carte en utilisant les premiers caractères comme une clé et l'itérateur comme élément de données. Ensuite, je peux faire une recherche rapide si j'ai besoin de traverser ligne par ligne. –

+0

Bien sûr, cela donnerait la même performance et serait probablement plus facile à mettre en œuvre. –