Просмотр полной версии : Парсинг длинных строк при помощи 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
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot