Выбор случайного значения из списка-массива (спинтакс) - excel vba

Узнай цену своей работы

Формулировка задачи:

Всем доброго вечера! Не смог кратко полностью описать в заголовке вопрос, но как бы основную проблему написал. Теперь подробнее. На днях столкнулся с новой задачей и никак не могу ее до конца решить. Суть: Найти в файле "html" все конструкции типа спинтакс, например, "{Доброго дня|Здравствуйте|Привет}, {уважаемый|дорогой} Петр!", случайным образом выбрать один вариант и заменить им набор. Т.е., в результате должно получиться: - Доброго дня, уважаемыйПетр! - Здравствуйте, дорогой Петр! - Привет, уважаемый Петр! - и т.д. Возникшие вопросы: 1. Как лучше считывать данные из файла "html" в кодировке UTF-8 без BOM? Много всего перелопатил - получилось только импортом на лист (переделал из макрорекордера):
Проблема этого решения, что я не знаю как искать конструкции "{||}" в случае, если начало конструкции в одной строке, а конец в другой. Плюс, мне кажется можно как-то обработать текст не записывая на лист, и соответственно будет работать быстрее. 2. Поиск конструкции "{||}" С учетом п.1, ищу построчно:
Вопросы: -Как обрабатывать если начало конструкции в одной строке, а конец в другой (вполне может быть что даже не в следующей, а через одну или две)? -Никак не придумаю как обрабатывать случаи, когда есть вложенные конструкции, например, "{Сегодня {отличный|хороший|прекрасный} день!|Как {дела|поживаете}}." 3. Сохранение полученного текста в формате "html" в кодировке UTF-8 без BOM. Решил таким образом:
Функции "LoadTextFromTextFile" и "SaveTextToFile" нашел где-то на просторах интернета пару лет назад - спасибо автору - часто выручают:
Т.о., повторю вопросы: 1. Как лучше считывать данные из файла "html" в кодировке UTF-8 без BOM? 2. Как обрабатывать если начало конструкции в одной строке, а конец в другой (вполне может быть что даже не в следующей, а через одну или две)? 3. Никак не придумаю как обрабатывать случаи, когда есть вложенные конструкции, например, "{Сегодня {отличный|хороший|прекрасный} день!|Как {дела|поживаете}}." Помогите пож-та. Вродь пока все, извините за большое количество текста..

Решение задачи: «Выбор случайного значения из списка-массива (спинтакс) - excel vba»

textual
Листинг программы
ВсеСкобки = "\{(.*?)\}"
СкобкиБезВложенных = "(\{([^\{\}]*)\})+"
Выражение = Replace(ВсеСкобки, "(.*?)", СкобкиБезВложенных) + "|" + ВсеСкобки

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5