Вход

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



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

Евгений Кислов
09.10.2024, 06:32
Добрый день.


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

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


записи подстрок в массив не корректные (некоторые строки обрезаны, некоторые пустые, некоторые элементы массива "value of the expression cannot be retrieved")

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

DolomanN
09.10.2024, 09:23
Добрый день.



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



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


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

https://disk.yandex.by/d/8T2107z7zTwk5g

Евгений Кислов
09.10.2024, 10:04
Вот пример использования. так же, к архиву приложил текстовый файл, который записан в строке.

https://disk.yandex.by/d/8T2107z7zTwk5g

В выложенном проекте нужно исправить две ошибки.

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

2.

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


input_array: ARRAY[1..200] OF STRING(100);

Тогда код будет работать корректно.

79247

DolomanN
09.10.2024, 10:39
В выложенном проекте нужно исправить две ошибки.

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

2.

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


input_array: ARRAY[1..200] OF STRING(100);

Тогда код будет работать корректно.

79247

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

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

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

Евгений Кислов
09.10.2024, 10:53
Проблему увидел, спасибо. Исследуем этот вопрос.

DolomanN
09.10.2024, 11:02
Проблему увидел, спасибо. Исследуем этот вопрос.

Могу вас попросить по результатам дать обратную связь? Кроме этого парсера других не нашел, которые могут работать с длинными строками

Евгений Кислов
09.10.2024, 11:04
Выше некорректно отписался, извините.

Если



input_array: ARRAY[1..200] OF STRING(100);


то

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

79252 79253