Показано с 1 по 8 из 8

Тема: Парсинг длинных строк при помощи OSU.SplitStringByToken

  1. #1

    По умолчанию Парсинг длинных строк при помощи OSU.SplitStringByToken

    При использовании функции столкнулся с трудностью в подборе UI_substring_size.
    Не совсем понимаю, как работает блок. получаю строку длиной около 8 000 байт, которая должна парситься в массив по токену. подстроки разной длины, из-за чего значение UI_substring_size не получается адекватно подобрать, записи подстрок в массив не корректные (некоторые строки обрезаны, некоторые пустые, некоторые элементы массива "value of the expression cannot be retrieved"). Думаю, я как-то неправильно использую блок. Если кто-то сталкивался, или работал с данным блоком, прошу помочь разобраться. Или может есть другие способы распарсить строку до 10 0000 символов при помощи разделителя. SPLIT.png
    Последний раз редактировалось DolomanN; 08.10.2024 в 22:37.

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,223

    По умолчанию

    Добрый день.

    из-за чего значение UI_substring_size не получается адекватно подобрать
    Нужно ориентироваться на максимально возможную длину подстроки.

    записи подстрок в массив не корректные (некоторые строки обрезаны, некоторые пустые, некоторые элементы массива "value of the expression cannot be retrieved")
    Выложите, пожалуйста, простейший проект, в котором я смогу это повторить.

  3. #3

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.



    Нужно ориентироваться на максимально возможную длину подстроки.



    Выложите, пожалуйста, простейший проект, в котором я смогу это повторить.

    Вот пример использования. так же, к архиву приложил текстовый файл, который записан в строке.

    https://disk.yandex.by/d/8T2107z7zTwk5g
    Последний раз редактировалось DolomanN; 09.10.2024 в 09:28.

  4. #4
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,223

    По умолчанию

    Цитата Сообщение от DolomanN Посмотреть сообщение
    Вот пример использования. так же, к архиву приложил текстовый файл, который записан в строке.

    https://disk.yandex.by/d/8T2107z7zTwk5g
    В выложенном проекте нужно исправить две ошибки.

    1. Функция LEN подходит только для строк, длина которых не превышает 255 символов.
    В вашем случае нужно использовать функцию StrLenA из библиотеки StringUtils (обратите внимание - это не OwenStringUtils, а другая библиотека).

    2.

    Нужно сделать так - чтобы было соответствие между объявлением массива и значением uiSubstringSize.

    Код:
    input_array: ARRAY[1..200] OF STRING(100);
    Тогда код будет работать корректно.

    2024-10-09_10-04-05.png

  5. #5

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    В выложенном проекте нужно исправить две ошибки.

    1. Функция LEN подходит только для строк, длина которых не превышает 255 символов.
    В вашем случае нужно использовать функцию StrLenA из библиотеки StringUtils (обратите внимание - это не OwenStringUtils, а другая библиотека).

    2.

    Нужно сделать так - чтобы было соответствие между объявлением массива и значением uiSubstringSize.

    Код:
    input_array: ARRAY[1..200] OF STRING(100);
    Тогда код будет работать корректно.

    2024-10-09_10-04-05.png
    На приложенном вами скриншоте массив сформировался неправильно. я для наглядности сделал все разделенные подстроки одинаковыми, но в результате они получаются разными(какие-то обрезаны).
    К примеру, из строки 1@0804640088021002115gKpn5CwG87mFFNC11FFD0FNC99dGV zdOvwCHl85aYdMlRUin6E0crdgLMvg18oKi/wagP=@2@0804640088021002115gKpn5CwG87mFFNC11FFD0FN C99dGVzdOvwCHl85aYdMlRUin6E0crdgLMvg18oKi/wagP=@3@0804640088021002115gKpn5CwG87mFFNC11FFD0FN C99dGVzdOvwCHl85aYdMlRUin6E0crdgLMvg18oKi/wagP=

    Должно получиться:

    1
    0804640088021002115gKpn5CwG87mFFNC11FFD0FNC99dGVzd OvwCHl85aYdMlRUin6E0crdgLMvg18oKi/wagP=
    2
    0804640088021002115gKpn5CwG87mFFNC11FFD0FNC99dGVzd OvwCHl85aYdMlRUin6E0crdgLMvg18oKi/wagP=
    3
    0804640088021002115gKpn5CwG87mFFNC11FFD0FNC99dGVzd OvwCHl85aYdMlRUin6E0crdgLMvg18oKi/wagP=

  6. #6

  7. #7

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Проблему увидел, спасибо. Исследуем этот вопрос.
    Могу вас попросить по результатам дать обратную связь? Кроме этого парсера других не нашел, которые могут работать с длинными строками

  8. #8
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,223

    По умолчанию

    Выше некорректно отписался, извините.

    Если

    Код:
    input_array: ARRAY[1..200] OF STRING(100);
    то

    uiSubstringSize должно быть 101 (или - что правильнее - SIZEOF(input_array[1])

    2024-10-09_11-00-32.png 2024-10-09_11-03-35.png

Похожие темы

  1. Объединение двух длинных строк
    от aaaSashaMGGU в разделе ПЛК2хх
    Ответов: 17
    Последнее сообщение: 17.05.2024, 15:36
  2. Парсинг JSON средствами ST в Codesys 3.5
    от Pavel_Makarov в разделе Сетевые технологии
    Ответов: 20
    Последнее сообщение: 28.11.2023, 10:32
  3. парсинг веб-портала контроллера
    от AlexBut в разделе Master SCADA 3
    Ответов: 14
    Последнее сообщение: 20.10.2022, 11:57
  4. ФБ Список строк
    от Vitamin в разделе Master SCADA 3
    Ответов: 2
    Последнее сообщение: 28.07.2020, 15:16
  5. ФБ Сравнение строк
    от S.A.D. в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 17.08.2012, 14:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •