alexkmbk / RegEx1CAddin

Native API component for executing regular expressions on 1C: Enterprise platform / Внешняя Native API компонента для выполнения регулярных выражений на платформе 1С:Предприятие 8
The Unlicense
173 stars 32 forks source link

Ошибка в методе НайтиСовпадения #1

Closed sorxros closed 5 years ago

sorxros commented 5 years ago

При передаче в метод длинного текста (пробовал на 500 символах) клиент падает! Очень прошу пофиксить! Разработка очень нужна в жизни!%)

alexkmbk commented 5 years ago

А не могли бы прикрепить текст и выражение на котором падает?

sorxros commented 5 years ago

Да, конечно. Выражение вот такое: "^(:20:)(.*(\n|$)(?!(^:20:))){4,}" Файл вот in.txt

alexkmbk commented 5 years ago

@sorxros Большое спасибо!

alexkmbk commented 5 years ago

@sorxros Сходу не воспроизвелось, проверял на 32-х битном клиенте, на windows 7. Попробуйте скачать и проверить на последней, 4-ой версии компоненты - https://github.com/alexkmbk/RegEx1CAddin/releases/tag/4

Если ошибка остается, прошу уточнить версию и разрядность платформы и ОС.

sorxros commented 5 years ago

Пользуюсь 4 версией. Ошибка повторяется регулярно. У меня win 10 pro 64x. Пробую в файловой БД. Сейчас подозреваю, что проблема не в длине строки, а в переносе строки (Символы.ПС). Продолжаю исследовать.

alexkmbk commented 5 years ago

@sorxros Я тестирую следующим кодом: `УстановитьВнешнююКомпоненту("ОбщийМакет.RegEx");

ПодключитьВнешнююКомпоненту("ОбщийМакет.RegEx", "Component", ТипВнешнейКомпоненты.Native);            

Рег = Новый("AddIn.Component.RegEx");

Textdoc = New TextDocument;

Textdoc.Read("D:\in.txt");

Рег.НайтиСовпадения(Textdoc.GetText(), "^(:20:)(.*(\n|$)(?!(^:20:))){4,}");

Пока Рег.Следующий() Цикл

    Сообщить(Рег.ТекущееЗначение);    

КонецЦикла;`

sorxros commented 5 years ago

Мой код в общем-то такой же. Пользуюсь платформой 8.3.12.1714. Возможно это баг платформы или файловой версии платформы.

alexkmbk commented 5 years ago

@sorxros Воспроизвелось и у меня, это падает на 64-битном клиенте платформы. То есть проблема в 64-битной версии компоненты. Постараюсь на выходных выделить время на разбор проблемы.

sorxros commented 5 years ago

Я тоже попробую разобраться. Если получится, то создам pull request.

alexkmbk commented 5 years ago

@sorxros Буду рад если пришлете pull request :-)

alexkmbk commented 5 years ago

@sorxros в качестве обходного решения можно обрабатывать текст построчно. Пока с проблемой разобраться не удалось, думаю может быть попробовать библиотеку boost.

alexkmbk commented 5 years ago

@sorxros Прикладываю отдельным файлом 64-битную версию компоненты, использующую boost::regex вместо std. На ней ошибки нет. (приложенный файл не является архивом, предназначенным для загрузки в макет)

RegExWin64.zip

alexkmbk commented 5 years ago

@sorxros

Выложена новая версия компоненты под номером 5. В ней был добавлен ряд новых возможностей и исправлена данная ошибка. Правда на текущий момент потеряна совместимость с Windows XP.

https://github.com/alexkmbk/RegEx1CAddin/releases/tag/5

Полагаю данный issue можно закрывать.

sorxros commented 5 years ago

Большое спасибо!