Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выбор случайного значения из списка-массива (спинтакс) - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выбор случайного значения из списка-массива (спинтакс) (Макросы/Sub)
Выбор случайного значения из списка-массива (спинтакс)
NaMoRZA Дата: Суббота, 17.09.2016, 14:00 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

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

Проблема этого решения, что я не знаю как искать конструкции "{||}" в случае, если начало конструкции в одной строке, а конец в другой.
Еще в таком варианте, если длинная строка или есть табуляция, то ее при вгрузке эксель разбивает по разным ячейкам одной строки и тогда я вообще не соображу как обрабатывать. А одно из условий обработки - полное сохранение всего файла в таком же виде со всеми пробелами, табуляциями и т.п.
Есть вариант считывания текста целиком, но я не могу понять как его обрабатывать:

2. Поиск конструкции "{||}"
С учетом п.1, ищу построчно - есть в файле-примере

Вопросы:
-Как обрабатывать если начало конструкции в одной строке, а конец в другой (вполне может быть что даже не в следующей, а через одну или две)?
-Никак не придумаю как обрабатывать случаи, когда есть вложенные конструкции, например, "{Сегодня {отличный|хороший|прекрасный} день!|Как {дела|поживаете}}."

3. Сохранение полученного текста в формате "html" в кодировке UTF-8 без BOM.
Решил с помощью функций "LoadTextFromTextFile" и "SaveTextToFile" нашел где-то на просторах интернета пару лет назад - спасибо автору - часто выручают (есть в прикрепленном примере).

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


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

Проблема этого решения, что я не знаю как искать конструкции "{||}" в случае, если начало конструкции в одной строке, а конец в другой.
Еще в таком варианте, если длинная строка или есть табуляция, то ее при вгрузке эксель разбивает по разным ячейкам одной строки и тогда я вообще не соображу как обрабатывать. А одно из условий обработки - полное сохранение всего файла в таком же виде со всеми пробелами, табуляциями и т.п.
Есть вариант считывания текста целиком, но я не могу понять как его обрабатывать:

2. Поиск конструкции "{||}"
С учетом п.1, ищу построчно - есть в файле-примере

Вопросы:
-Как обрабатывать если начало конструкции в одной строке, а конец в другой (вполне может быть что даже не в следующей, а через одну или две)?
-Никак не придумаю как обрабатывать случаи, когда есть вложенные конструкции, например, "{Сегодня {отличный|хороший|прекрасный} день!|Как {дела|поживаете}}."

3. Сохранение полученного текста в формате "html" в кодировке UTF-8 без BOM.
Решил с помощью функций "LoadTextFromTextFile" и "SaveTextToFile" нашел где-то на просторах интернета пару лет назад - спасибо автору - часто выручают (есть в прикрепленном примере).

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

Автор - NaMoRZA
Дата добавления - 17.09.2016 в 14:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выбор случайного значения из списка-массива (спинтакс) (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!