Всем доброго дня! Не смог кратко полностью описать в заголовке вопрос, но как бы основную проблему написал. Теперь подробнее. На днях столкнулся с новой задачей и никак не могу ее до конца решить. Суть: Найти в файле "html" все конструкции типа спинтакс, например, "{Доброго дня|Здравствуйте|Привет}, {уважаемый|дорогой} Петр!", случайным образом выбрать один вариант и заменить им набор. Т.е., в результате должно получиться: - Доброго дня, уважаемыйПетр! - Здравствуйте, дорогой Петр! - Привет, уважаемый Петр! - и т.д. Возникшие вопросы: 1. Как лучше считывать данные из файла "html" в кодировке UTF-8 без BOM? Много всего перелопатил - получилось только импортом на лист (переделал из макрорекордера) - есть в файле-примере.
Проблема этого решения, что я не знаю как искать конструкции "{||}" в случае, если начало конструкции в одной строке, а конец в другой. Еще в таком варианте, если длинная строка или есть табуляция, то ее при вгрузке эксель разбивает по разным ячейкам одной строки и тогда я вообще не соображу как обрабатывать. А одно из условий обработки - полное сохранение всего файла в таком же виде со всеми пробелами, табуляциями и т.п. Есть вариант считывания текста целиком, но я не могу понять как его обрабатывать:
[vba]
Код
Dim objStream, strData Set objStream = CreateObject("ADODB.Stream") objStream.CharSet = "utf-8" objStream.Open objStream.LoadFromFile("c:\test\123.html") strData = objStream.ReadText()
[/vba]
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 - текущий вариант обработки. Помогите пож-та. Может можно как-то реализовать выбор случайного синонима с помощью регулярных выражений, но я никак не могу понять как это сделать. Вродь пока все, извините за большое количество текста..
Всем доброго дня! Не смог кратко полностью описать в заголовке вопрос, но как бы основную проблему написал. Теперь подробнее. На днях столкнулся с новой задачей и никак не могу ее до конца решить. Суть: Найти в файле "html" все конструкции типа спинтакс, например, "{Доброго дня|Здравствуйте|Привет}, {уважаемый|дорогой} Петр!", случайным образом выбрать один вариант и заменить им набор. Т.е., в результате должно получиться: - Доброго дня, уважаемыйПетр! - Здравствуйте, дорогой Петр! - Привет, уважаемый Петр! - и т.д. Возникшие вопросы: 1. Как лучше считывать данные из файла "html" в кодировке UTF-8 без BOM? Много всего перелопатил - получилось только импортом на лист (переделал из макрорекордера) - есть в файле-примере.
Проблема этого решения, что я не знаю как искать конструкции "{||}" в случае, если начало конструкции в одной строке, а конец в другой. Еще в таком варианте, если длинная строка или есть табуляция, то ее при вгрузке эксель разбивает по разным ячейкам одной строки и тогда я вообще не соображу как обрабатывать. А одно из условий обработки - полное сохранение всего файла в таком же виде со всеми пробелами, табуляциями и т.п. Есть вариант считывания текста целиком, но я не могу понять как его обрабатывать:
[vba]
Код
Dim objStream, strData Set objStream = CreateObject("ADODB.Stream") objStream.CharSet = "utf-8" objStream.Open objStream.LoadFromFile("c:\test\123.html") strData = objStream.ReadText()
[/vba]
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