Леонид, в длинном исходном тексте могут быть все буквы и знаки. И буква "ж", которую мне менять не надо, тоже.
Т.е. результат работы компонента - непредсказуем.
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
|
|||
карма: 25 |
|
Ответов: 8926
Рейтинг: 823
|
|||
Tad, кроме "ж" есть "1 -- 9", "~", "@"...., и вообще, перед заменой можно проверить весь текст на наличие в нём всех символов от1 до 255 (даже Лев Николаевич не все из них использовал)
|
|||
карма: 19 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Tad писал(а): Т.е. результат работы компонента - непредсказуем.А бсолютно предсказуем, и работает именно так, как я сказал nesco писал(а): Он изначально был разработан именно для замены нескольких последовательных Replace.Последовательные Replace работают алгоритмическаи точно так же
nesco писал(а): из дискретных элементовкак вам хочется Вопрос считаю исчерпаным. |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Леонид писал(а): перед заменой можно проверить весь текст на наличие в нём всех символов от1 до 255Допустим есть все. Значит, следующий шаг - проверка на отсутствие сочетаний. "жу" -есть "жо" -есть "жй" - Ура! Нет! Можно применить. Ваши действия дальше ? ------------ Дoбавленo в 12.21: nesco писал(а): Вопрос считаю исчерпаным.Биться лбом о стенку - занятие не из благодарных. |
|||
карма: 25 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Tad писал(а): Ваши действия дальше ?А ваши Я не вижу поползновений выложить схему решения своего агоритма, где будет реализовано Tad писал(а): буква "ж", которую мне менять не надоТе как бы ты сделал свою схему с 'аб', чтобы она работала как тебе нужно |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Neo писал(а): Прямо не пойму где я дурак...Если говорить о самых общих принципах проектирования, перефразируя применительно к HiAsm , то можно назвать три основных положения:
1. Компонент должен помогать выполнить задачу, а не становиться этой задачей. 2. При работе с компонентом пользователь не должен ощущать себя дураком. 3. Компонент должен работать так, чтобы пользователь не считал разработчика компонента дураком. Довольно эмоциональные формулировки, но, тем не менее, верные. nesco писал(а): Те как бы ты сделал свою схему с 'аб', чтобы она работала как тебе нужноСоставил бы карту замены и, не трогая исходную строку, сфоррмировал бы новую, а после уничтожил бы исходную. А менять букву "а" в замене - это полный абсурд. |
|||
карма: 25 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Tad писал(а): Составил бы карту замены и, не трогая исходную строку, сфоррмировал бы новую, а после уничтожил бы исходную.А менять букву "а" в замене - это полный абсурд.Как это сделать Ну составили карты на каждую замену, но в следующей замене не будет того, что есть в предыдущей, как это все объединить после всех преобразований Пример решения в студию. |
|||
карма: 22 |
|
Ответов: 8926
Рейтинг: 823
|
|||
Neo писал(а): ..нужно самому мудрить с маской и перебором массива строк-замен.. |
|||
карма: 19 |
| ||
файлы: 1 | code_32290.txt [6KB] [204] |
Ответов: 704
Рейтинг: 7
|
|||
Коллеги, не считайте дураком. Всю сознательную жизнь хиасмиста делал вот так: code_32292.txt
Потом совсем недавно узнал про компонент мультистрочной замены и возрадовался (в старой сборке его не было) - подумалось мне что он быстрее будет. (Скорость так и не удосужился замерить на хорошем кусочке текста) Видимо у меня задача не та просто. Я-то думал что в компоненте все как в моей схеме, только компактнее, а оказалось что он работает именно как много реплейсов подряд. И сбило меня с толку именно то, какой формат замен у него - упорядоченный. Думал берет он и перебирает как по таблице их. Совпало - выкинул замененную строку и все. Так что возвращаюсь к своей любимой безотказной маске строк И работает компонент нормально, просто те же замены, только удобнее их задавать, как я теперь понял. |
|||
карма: 0 |
| ||
файлы: 1 | code_32292.txt [684B] [199] |
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Neo писал(а): И работает компонент нормально, просто те же замены, только удобнее их задавать, как я теперь понялТак и есть -- много Replace подряд, только в текстовом представлении |
|||
карма: 22 |
|
Ответов: 9906
Рейтинг: 351
|
|||
nesco писал(а): Как это сделать Обыкновенненькая задача лексического анализа Левые части - регулярные выражения для лексем. Правые части - данные для специфического (тупая замена) семантического правила. Не забываем применять "правило самой длинной лексемы" - и всего-то делов. |
|||
карма: 9 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Galkov писал(а): Обыкновенненькая задача лексического анализаЕсть гораздо проще путь для решения поставленной задачи -- исключения последовательных замен. Но я пока не буду его оглашать. |
|||
карма: 22 |
|
Ответов: 9906
Рейтинг: 351
|
|||
1) Вообще-то, я прикалывался
2) Но, поскольку я знаю некоторые приколы "лексического анализа" -- сомнения возникают насчет корректности "более простого" пути. Там хватает ехидненьких вопросов. 3) А отсюда мысль: а оно настолько надо, чтобы делать типа упрощенную версию сканера по фамилии MultiReplace ??? Не, ну полезность полноценного лексического анализатора - отрицать невозможно. А вот его полу-версии будут и полу-работать.... Чего-то мне так пока кажется. Стоит ли тратить время на полу-работающие версии |
|||
карма: 9 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Galkov писал(а): Чего-то мне так пока кажетсяСейчас попытаюсь сделать прототип задуманного в схемном решении. можно будет взвесить все "за" и "против". ------------ Дoбавленo в 11.47: Вот что получилось:
Алгоритм очень простой: 1-й проход -- меняем нужные вложения на индексные маркеры, 2-й проход -- меняем индескные маркеры на нужные замены. |
|||
карма: 22 |
|
Ответов: 9906
Рейтинг: 351
|
|||
nesco писал(а): можно будет взвесить все "за" и "против"Мне удобней взвешивать ДО, а не ПОСЛЕ Наверное -- старый стал, и ленивый. Ну вот нашел ты первый маркер. Ай какой молодец. А вот только кто тебе сказал, что этот текст принадлежит первому маркеру, а не пятому. К примеру.... Есть служебные слова: IF, IFELSE, и т.п.. И ты нашел IF. Где гарантии, что это не начало IFELSE. Есть цифирьки (кажется даже кто-то и приводил такое) 15, 0x15, и 153 И ты нашел 15. Где гарантии, что это не начало 153. Или продолжение 0x15 Ну и т.п.. |
|||
карма: 9 |
|