HTML to Text

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
RaFaeL
Ветеран
Сообщения: 835
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

HTML to Text

Сообщение RaFaeL » 05 Январь 2019, 19:25

Ищется код конвертации произвольного HTML (если конкретно то электронное письмо) в текст. На чистом кларионе, можно на С который кларион понимает, winapi можно. Без лишних dll и .net. На текущий момент используем jhtml, там можно это сделать несколько костыльной комбинацией методов, но класс весьма тяжелый и ему нужно окно с контролом html, соотв. ищу что-то более подходящее для фоновой массовой конвертации

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

HTML to Text

Сообщение Дед Пахом » 05 Январь 2019, 19:41

Наверно через OLE(Shell.Explorer.2) можно, вызвав txt = ?ole{'Document.body.innertext'}
С уважением, ДП

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

HTML to Text

Сообщение Дед Пахом » 05 Январь 2019, 20:39

Работает.
С уважением, ДП

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 835
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

HTML to Text

Сообщение RaFaeL » 05 Январь 2019, 21:51

А можно пример чуть больше чем 1 строку? Спасибо заранее

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

HTML to Text

Сообщение Дед Пахом » 05 Январь 2019, 22:16

Я проверял так:

Код: Выделить всё

?OLE1{'Navigate("'& 'file://'& CLIP(htmlfile) &'")'}
!-- тут надо вызвать что-то типа SLEEP, чтобы подождать, пока загрузится документ
MESSAGE(?OLE1{'Document.body.innertext'})
Можно вместо Navigate(file) загрузить содержимое файла, только не помню как.
С уважением, ДП

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

HTML to Text

Сообщение Дед Пахом » 05 Январь 2019, 22:37

Вот так можно: сначала (при входе в процедуру) инициализируем DOM

Код: Выделить всё

?OLE1{'Navigate("about:blank")'}
затем в цикле загружаем html и сразу читаем текст

Код: Выделить всё

      ?OLE1{'Document.body.innerhtml'} = '<div spellcheck="true"><p>Dummy document.</p><textarea rows=4 cols=60>textarea with speling erors..</textarea></div>'
      MESSAGE(?OLE1{'Document.body.innertext'})
С уважением, ДП

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 835
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

HTML to Text

Сообщение RaFaeL » 05 Январь 2019, 22:48

Упорно выдает GetPropertyFailed х.з. чего не хватает

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

HTML to Text

Сообщение Дед Пахом » 05 Январь 2019, 22:53

Ну не знаю, у меня GetPropertyFailed если Navigate не успел отработать.
С уважением, ДП

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 835
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

HTML to Text

Сообщение RaFaeL » 05 Январь 2019, 23:21

Так это выходит то же самое, что и jhtml делает, только без обертки. Ищется то другое

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

HTML to Text

Сообщение Дед Пахом » 06 Январь 2019, 1:43

понятно, 2 строчки много, хочется покороче :-)
С уважением, ДП

Аватара пользователя
morkovin
Ветеран
Сообщения: 562
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

HTML to Text

Сообщение morkovin » 06 Январь 2019, 7:26

Может это подойдёт? (StringTheory from CapeSoft)
RemoveHTML
RemoveHTML()
Description
Removes all HTML markup from the object, leaving just text behind.

Notes
Everything between <head> and </head>, between <style> and </style> and between <script> and </script> are removed.

Return Value
Returns nothing, The text in the object is changed.
WBR, morkovin

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 835
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

HTML to Text

Сообщение RaFaeL » 06 Январь 2019, 12:47

Дед Пахом писал(а):
06 Январь 2019, 1:43
понятно, 2 строчки много, хочется покороче
Не покороче, а чтобы работало без окон и т.п.
У меня не получилось заставить это все работать в фоне внутри процесса. На окошке в присутствии пользователя да, нормально работает, в фоне не хочет ничего грузить в объект

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3874
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

HTML to Text

Сообщение Игорь Столяров » 06 Январь 2019, 12:53

RaFaeL писал(а):
06 Январь 2019, 12:47
в фоне не хочет ничего грузить в объект
Это в принципе интерфейсный объект.
Надо открыть пустое рабочее окно размером 1x1 и спрятать его Hide(Window).
А после выполнения - закрыть ...
«V» значит Вендетта !

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 835
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

HTML to Text

Сообщение RaFaeL » 06 Январь 2019, 13:48

Вот именно так и не удалось заставить работать. Если вывести простой stop() или открыть окно в accept цикл и крестиком сразу закрыть то работает, а пока хоть что-то не сделаешь руками - не грузит, хоть час жди там GetPropertyFailed. Вероятно, ожидается какое-то событие, но пока не удалось подобрать, что именно и куда надо послать. Да и вообще все это не решение, я по сути пишу службу, которая в фоне на сервере будет грузить электронную почту - не должно там никаких окон быть

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 835
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

HTML to Text

Сообщение RaFaeL » 06 Январь 2019, 14:31

morkovin писал(а):
06 Январь 2019, 7:26
Может это подойдёт? (StringTheory from CapeSoft)
Посмотрел, спасибо!
Более-менее работает, но полная беда с переносами и служебными символами (кавычки и т.п.)
Может быть, попробую сам допилить до какого-то удобоваримого результата

Ответить