Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 438
от 03.05.2006, 11:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 325, Экспертов: 26
В номере:Вопросов: 1, Ответов: 2


Вопрос № 41422: Добрый день, уважаемые эксперты. Такая задача: Прочитал файл формата .rtf в buffer. Далее необходимо очиститься от тегов, к примеру: необходимо в тексте найти { ov} и заменить на 13h,10h И т.д. Как осуществить заме...

Вопрос № 41.422
Добрый день, уважаемые эксперты.

Такая задача:

Прочитал файл формата .rtf в buffer.
Далее необходимо очиститься от тегов, к примеру:
необходимо в тексте найти { ov} и заменить на 13h,10h И т.д.

Как осуществить замену в текте??

Заранее благодарен.

Valentin.
Отправлен: 27.04.2006, 11:03
Вопрос задал: Савенок Валентин Николаевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Пан Павел Константинович
Здравствуйте, Савенок Валентин Николаевич!

> Как осуществить замену в текcте??
>> Интересный вопрос, а самой главное как эту задачу? решают профи. из Microsoft, давайте анализировать имеющиеся у нас данные.

Инструменты для анализа ситуации:
1. Блокнот.exe(входит в поставку ОС Windows)
2. Hiew.exe(16-ый редактор)
3. Листочик формата А-4 и карандаш.

Давайте создадим файл LAB.TXT и напечатаем в этом фйале строку 001122. Теперь откроем этот файл из Hiew.exe, после открытия этого файла мы видим 16 -ую последовательность типа 30-30-31-31-32-32, того размер файла 6 байт. Блокнот.ехе имеет фун-ию замены(Правка -> Заменить), давайте заменим 11 на пустую строку и сохраним наш подопотный файл, затем откроем его через Hiew.exe что получим? получим 0022, это означает то что фун-ия замены просто передвинула 22 на место 11 тем самым затерев 11 НО! вы скажете что передвижение байт это простое копирование и правильно скажете тем самым мы должны получить не 0022, а 002222, так оно бы и было если бы фун-ия замены не сохраняла колл-во замененых байт, тем самым сообщая что Блокноту.ехе надо сохранить данные из буфера в файл, только 4 байта, а не 6 байт, что он и делает.

Вывод опыта:
1. Замена на пустую строку - это простое перетаскивание "Хвоста" к началу файла на L - ое колл-во байт, где L определяется длинной заменяемой строки. А так же сохранение байт в файл из буфера колл-во которых, определяется как N = M - T, где M - общее изначальное колл-во байт т.е. до момента замены, а T = L * F, F - колл-во блоков которые будут заменены.
2. Замена на пустую строку - это не замена блоков на спец. символы которые дают эфект токо, что замененые симолы удалились.

Например:
00XX22, где X - спец. управляющий или спец. символ.

А что касается замены символа на символ, то здесь картина такова:

1. Вы сканируете буфер на наличие флага он же '/' или '<' или '['
2. Если ситуация после сканирования одназначна т.е. наличие '/' 100% говорит о том что мы имеем дело с тегом то далаем замену.
3. Замена должна осущ-ся. так чтобы заменяемый блок был полностью заполнен байтами замены иначе будет абра-кадабра.

Например:
/XYZ - '/' = QQh, 'X' = XXh, 'Y' = YYh, 'Z' = ZZh
После замены:
/XYZ - '/' = SSh, 'X' = SSh, 'Y' = SSh, 'Z' = SSh
SSh - это байт для замены.

Предложение:
Делайте это всё на языке высокого уровны типа С, С++, Perl, PHP.
Perl, PHP - надо выделить особо.

С, Уважением MnEm0n!C.
---------
Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: 6-ой класс)
Ответ отправлен: 27.04.2006, 13:37
Оценка за ответ: 3
Комментарий оценки:
Яву-это хорошо, но вопрос конкретный и в конкретный раздел рассылки.

Отвечает: EPDSota
Здравствуйте, Савенок Валентин Николаевич!

Замену именно в тексте легко сделать, так как строка "13h,10h" размером не больше заменяемой "{ ov}". Во общем случае это делаеться с помощью конечных автоматов (см. пример)...

Приложение:

---------
Открыть глаза навстречу солнцу

Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 27.04.2006, 15:19
Оценка за ответ: 4
Комментарий оценки:
Ответ хороший, спасибо. Пример немножко недоработан.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.31 от 28.04.2006
Яндекс Rambler's Top100

В избранное