1с html документ чтение

Извлечь Текст Из HTML

При работе c HTML файлами из интернета часто приходится извлекать текст в формте HTML , очищенный от тегов, скриптов и заголовков для сохраненеия при необходимости в переменной типа строка с неограниченной длиной. .

ТекстСодержания = СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML( ИсходныйТекстHTML);

Функцция очищает текст в формате HTML от тегов и возвращает неформатированный текст.
Параметры:
ИсходныйТекстHTML – Строка – текст в формате HTML.
Возвращаемое значение: Строка – текст, очищенный от тегов, скриптов и заголовков.

Функция ИзвлечьТекстИзHTML(Знач ИсходныйТекст) Экспорт Результат = ""; Текст = НРег(ИсходныйТекст); // отрезаем все что не body Позиция = СтрНайти(Текст, "  Если Позиция > 0 Тогда Текст = Сред(Текст, Позиция + 5); ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 5); Позиция = СтрНайти(Текст, ">"); Если Позиция > 0 Тогда Текст = Сред(Текст, Позиция + 1); ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); КонецЕсли; КонецЕсли; Позиция = СтрНайти(Текст, ""); Если Позиция > 0 Тогда Текст = Лев(Текст, Позиция - 1); ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1); КонецЕсли; // вырезаем скрипты Позиция = СтрНайти(Текст, "  Пока Позиция > 0 Цикл ПозицияЗакрывающегоТега = СтрНайти(Текст, ""); Если ПозицияЗакрывающегоТега = 0 Тогда // Не найден закрывающий тег - вырезаем оставшийся текст. ПозицияЗакрывающегоТега = СтрДлина(Текст); КонецЕсли; Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 9); ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 9); Позиция = СтрНайти(Текст, "  КонецЦикла; // вырезаем стили Позиция = СтрНайти(Текст, "  Пока Позиция > 0 Цикл ПозицияЗакрывающегоТега = СтрНайти(Текст, ""); Если ПозицияЗакрывающегоТега = 0 Тогда // Не найден закрывающий тег - вырезаем оставшийся текст. ПозицияЗакрывающегоТега = СтрДлина(Текст); КонецЕсли; Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 8); ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 8); Позиция = СтрНайти(Текст, "  КонецЦикла; // вырезаем все теги Позиция = СтрНайти(Текст, " <"); Пока Позиция > 0 Цикл Результат = Результат + Лев(ИсходныйТекст, Позиция-1); Текст = Сред(Текст, Позиция + 1); ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); Позиция = СтрНайти(Текст, ">"); Если Позиция > 0 Тогда Текст = Сред(Текст, Позиция + 1); ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); КонецЕсли; Позиция = СтрНайти(Текст, " <"); КонецЦикла; Результат = Результат + ИсходныйТекст; МассивСтрок = РазложитьСтрокуВМассивПодстрок(Результат, Символы.ПС, Истина, Истина); Возврат СокрЛП(СтрСоединить(МассивСтрок, Символы.ПС)); КонецФункции

В теле данной функции есть вызов другой функции РазложитьСтрокуВМассивПодстрок

Читайте также:  Php pdo table exist

Функция РазложитьСтрокуВМассивПодстрок разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину. В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы,
рекомендуется использовать функцию платформы СтрРазделить.

Параметры данной функции:
Значение – Строка – текст с разделителями;
Разделитель – Строка – разделитель строк текста, минимум 1 символ;
ПропускатьПустыеСтроки – Булево – признак необходимости включения в результат пустых строк.
Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:
– для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки включаются в результат;
– если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в случае разделителя-пробела результатом функции будет массив, содержащий одно значение “” (пустая строка), а при других разделителях результатом функции будет пустой массив.
СокращатьНепечатаемыеСимволы – Булево – сокращать непечатаемые символы по краям каждой из найденных подстрок.
Возвращаемое значение:
Массив – массив строк.
Пример:

Результат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ","); // возвратит массив из 5 элементов, три из которых - пустые: "", "один", "", "два", ""; СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) // - возвратит массив из двух элементов: "один", "два"; // СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(" один два ", " ") // - возвратит массив из двух элементов: "один", "два"; // СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("") // - возвратит пустой массив; // СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("",,Ложь) // - возвратит массив с одним элементом: ""(пустая строка); // СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("", " ") // - возвратит массив с одним элементом: "" (пустая строка). //
Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт Если Разделитель = "," И ПропускатьПустыеСтроки = Неопределено И СокращатьНепечатаемыеСимволы Тогда Результат = СтрРазделить(Значение, ",", Ложь); Для Индекс = 0 По Результат.ВГраница() Цикл Результат[Индекс] = СокрЛП(Результат[Индекс]) КонецЦикла; Возврат Результат; КонецЕсли; Результат = Новый Массив; // Для обеспечения обратной совместимости. Если ПропускатьПустыеСтроки = Неопределено Тогда ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); Если ПустаяСтрока(Значение) Тогда Если Разделитель = " " Тогда Результат.Добавить(""); КонецЕсли; Возврат Результат; КонецЕсли; КонецЕсли; // Позиция = СтрНайти(Значение, Разделитель); Пока Позиция > 0 Цикл Подстрока = Лев(Значение, Позиция - 1); Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда Если СокращатьНепечатаемыеСимволы Тогда Результат.Добавить(СокрЛП(Подстрока)); Иначе Результат.Добавить(Подстрока); КонецЕсли; КонецЕсли; Значение = Сред(Значение, Позиция + СтрДлина(Разделитель)); Позиция = СтрНайти(Значение, Разделитель); КонецЦикла; Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда Если СокращатьНепечатаемыеСимволы Тогда Результат.Добавить(СокрЛП(Значение)); Иначе Результат.Добавить(Значение); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции

Поделиться ссылкой:

Источник

Читайте также:  Php msi windows installer

1С 8.x : Как получить текст из html?

Распечатать

Один мой хороший клиент использует встроенный в 1С почтовый клиент.

До этого все работало хорошо, но недавно из-за установки нового банк-клиента на компьютере обновили Internet Explorer до 11 версии - стала появляться ошибка:

Поле объекта не обнаружено innerText

Пришлось немного доработать типовую функцию получения текста из html:

 Функция ПреобразоватьТекстИзХТМЛФорматаВПростой(ТекстВФорматеХТМЛ) Экспорт 
Попытка
НовыйHTMLДокумент = Новый COMОбъект("HtmlFile");
НовыйHTMLДокумент.open("text/html");
НовыйHTMLДокумент.write(ТекстВФорматеХТМЛ);
НовыйHTMLДокумент.close();

Возврат СтрЗаменить(НовыйHTMLДокумент.all.item(0).innerText, Символ(13), "");
Исключение
Построитель = Новый ПостроительDOM;
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(ТекстВФорматеХТМЛ);
ДокументHTML = Построитель.Прочитать(ЧтениеHTML);

Возврат СокрЛП(ДокументHTML.Тело.ТекстовоеСодержимое);
КонецПопытки;
КонецФункции

еще функции пример получения:

 // Процедура изменяет признак формат текста письма (Текст, HТМЛ), 
// и при этом конвертирует сам текст.
//
// Параметры:
// ЭУHTML,ЭУТекст - Элементы управления формы, соответственно поле HTML и поле Текст
// Кнопка - выбранная кнопка ее текст "Простой текст" или "HTML" новый вид текста письма
// либо текст кнопки если пометку кнопки менять не требуется, соответственно
// вопрос о потере форматирования задаваться не будет
// Возвращаемое значение:
// Булево, признак выполнения изменения формата
//
Функция удИзменитьФорматТекста(ЭУHTML,ЭУТекст, Кнопка) Экспорт
Если ТипЗнч(Кнопка) = Тип("Строка") Тогда
НовыйВидТекстаПисьма = Кнопка;
ЕстьКнопка = Ложь;
Иначе
Если Кнопка.Пометка Тогда
Возврат Ложь;
КонецЕсли;
НовыйВидТекстаПисьма = Кнопка.Текст;
ЕстьКнопка = Истина;
КонецЕсли;

Если Найти(НовыйВидТекстаПисьма,"Простой текст") > 0 Тогда
ИсходныйТекст = ЭУHTML.ПолучитьТекст();
НачалоBODY = Найти(ИсходныйТекст, "");
КонецBODY = Найти(ИсходныйТекст, "");
Если ЕстьКнопка и (НачалоBODY > 0 И КонецBODY > 0 И (НачалоBODY + 6) < КонецBODY) Тогда
СтрокаВопроса = "Будет потеряно форматирование текста. Продолжить?";
ОтветНаВопрос = Вопрос(СтрокаВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
Если ОтветНаВопрос <> КодВозвратаДиалога.Да Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
ФорматТекста = ЭУHTML.Документ.all.item(0).innerText;
ЭУТекст.Значение = СтрЗаменить(ФорматТекста, Символ(13), "");
ЭУТекст.Видимость = Истина;
ЭУHTML.Видимость = Ложь;
ЭУHTML.УстановитьТекст("");
Иначе
ФорматХТМЛ = СтрЗаменить(ЭУТекст.Значение, Символы.ПС, "");

ЭУHTML.УстановитьТекст(ФорматХТМЛ);
ЭУHTML.Видимость = Истина;
ЭУТекст.Видимость = Ложь;
КонецЕсли;

Если ЕстьКнопка Тогда
Кнопка.Пометка = Истина;
КонецЕсли;
Возврат Истина;


КонецФункции // обИзменитьФорматТекста()

Распечатать

Похожие FAQ

10060 (0x0000274C): Попытка установить соединение была безуспешной 24
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает 🙂 И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь= Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Посмотреть все результаты поиска похожих

Еще в этой же категории

Передача файлов и данных на веб-сервер из 1С методами GET и POST 46
При интеграции 1С с веб-сайтами всегда встает вопрос о передачи некоторых данных на веб-сервер. Будь то это передача параметров запроса для получения данных от веб-сервера в 1С или же передача данных из 1С, которые должны быть сохранены или каким-то Работа с Почтой в 1С: Предприятие v 8 19
У разработчиков на платформе 1С иногда возникает задача по взаимодействию системы 1С: Предприятие с различными почтовыми программами и протоколами. 1С Предприятие 8.0 имеет довольно удобные средства для отправки сообщений, импорта писем из почтового Работа с форматом JSON в 1С 19
При обмене данными с веб-сайтами зачастую используется формат JSON. К сожалению, в 1С нет стандартных процедур для работы с данным форматом. В процессе реализации одного из проектов мной был разработан ряд процедур и функций облегчающих жизнь програ Обмен данными с сайтом используя формат JSON в 1С 14
Формат JSON в 1С до версии 8.3.6 не реализован, но нижет я приведу примеры функций которые можно использовать для полноценной работы JSON в 1С предыдущий версий. JSON (JavaScript Object Notation) это текстовый формат обмена данными, широко ис Парсер сайта на 1С 10
В этой статье я постараюсь описать процесс парсинга сайтов средствами 1С с примером. Это статья не является инструкцией к применению, а лишь демонстрирует возможности 1С. Что мы имеем? 1. Сайт в интернете, на котором располагается список товаро Посмотреть все в категории Работа с Интернет, Почтой (Mail), FTP

Источник

Оцените статью