Вопрос по редактированию текста - PullRequest
0 голосов
/ 30 июня 2010

Я пересекаю текстовый файл построчно, корректируя текст так, чтобы файл в конечном итоге соответствовал синтаксису, необходимому для запуска на симуляторе MIPS (MARS). Моя проблема в том, что всякий раз, когда я вижу строку со строкой «blezl», я хочу сделать несколько вещей. Сначала мне нужно вставить несколько строк текста после строки, содержащей это слово. Это достаточно просто, используя вставку. Затем мне нужно вставить несколько строк текста после строки, которая первоначально следовала за найденной строкой. Проблема в том, что мне нужно найти во всем документе строку, которая была в конце найденной строки, а затем вставить несколько строк перед строками, которые содержат 2-ю найденную строку. Так ..

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

мне нужно найти "blezl", а затем я вставляю несколько строк между "# 1" и "# 2". Затем я вставляю несколько строк между «# 2» и «# 3», а затем мне нужно искать во всем документе «# 10», и, когда я их нахожу, я вставляю несколько строк перед ним. Проблема в том, что последний шаг требует, чтобы я искал весь документ (посередине обхода построчно, пока не был найден blezl). Это потому, что «# 10» может произойти где-нибудь до или после «# 1». Это займет вечность (в моем файле 80 тыс. Строк, и, вероятно, около 2% из них содержат «blezl»). Как я могу это сделать без большого избыточного шага?

1 Ответ

0 голосов
/ 30 июня 2010

80 тыс. Строк недостаточно велики, чтобы их нельзя было загрузить в оперативную память. Поиск достаточно быстр, если у вас есть данные в оперативной памяти.

Если вы беспокоитесь о производительности, вы можете создать b-дерево для хранения строк на основе метки. Это даст вам log (n) время поиска для каждой строки, которую вам нужно найти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...