|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
||||||
Быстрая работа со строкой (быстрый парсинг)07.11.2019, 14:22. Показов 2237. Ответов 5
Метки нет (Все метки)
Есть строка вида "имя1(значение1),имя2(значение2),"
Где "имя" и "значение" могут иметь произвольную длину (от 1 символа и до ...), а сами строки включать жуткие количества таких сочетания "имя-значения" и быть до 100 и более килобайт ... Задача - обеспечить скоростной парсинг строки с обеспечением функционала сейчас идут прилагаемые функции типа "есть ли имя, количество блоков, поиск имени по номеру, поиск имени по значению, поиск значения по номеру, поиск значения по имени, ... и др." Делается это так: при получении строки она парсится с формированием ключевой для этой функции информацией о строке, информация укладывается в кеш и в дальнейшем, при ее наличии в кеше, изымается оттуда и по ней осуществляется работа со строкой. Парсинг осуществляется: - перекладыванием строки в байтовый массив - replace всех "(", ")" и ",", далее split по сочетанию на замененные символы (у меня это "#%&") и перебором полученных реперных точек, через которые получаю точки входа и выхода имен и значений ... Это на 1-2 десятка процентов быстрее, чем в тупую посимвольно перебирать байтовый массив (даже анализируя лишь второй байт как ="0" для ключевых симоволов) ... а на больших длинах строк в десятки килобайт и больше - полный перебор МЕДЛЕННЕЕ в 2-3 раза, чем первый вариант с 3-ым replace и split'ом Еще в десятки раз медленне вырезки Mid'ом и всякие "objRegExp.Pattern = "[\(\)\,]" ... Что добивает - перебор массива строки на уровне сравнения чисел медленнее чем "3 раза машинный перебор той же строки и каждый раз с заменой каких-то символов (с выделением памяти и перезаписью строки) + еще один перебор с резкой строки (опять же с выделением памяти и записью)" ... хочется спросить ЧТО ТАМ ПРОИСХОДИТ и почему единичный перебор строки на уровне численного сравнения половины (из нее) байт- так медленнее?! И самое важное - кто что может предложить для более быстрой работы со строкой?! КАК перебирать, резать и парсить строку еще быстрее? Может какой-то экстравагантный способ работы со строкой или через указатель? Самый быстрый из найденных вариантов:
0
|
||||||
| 07.11.2019, 14:22 | |
|
Ответы с готовыми решениями:
5
Быстрый парсинг строки |
|
Модератор
|
||
| 07.11.2019, 14:57 | ||
|
например: есть ли запятые,апострофы внутри апострофов,какова максимальная длина ключевых слов, все ли значения в апострофах или числовые/даты без апострофов
0
|
||
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
||
| 07.11.2019, 18:02 [ТС] | ||
|
нет ограничений ни на длину имени ни на длину значений ... по факту, судя по максимумам ... имя может быть до 300-500 символов, значение - до предела длины строки как типа Например: ПроСемью(мама(пошла гулять),ДругиеЧленыСемьи(Папа(пошел спать),Сестра(села учить уроки))),ПроМеня(я не люблю гречку) Длина строки - предел длины строки как типа, количество элементов - любое, вложенность - любая Фактически это сериализация данных, которая является базовой структурой и позволяет не думать ни о типах ни о структурах ни о стандартах передачи и хранения данных ... но за это приходится платить временем парсинга Добавлено через 1 час 6 минут На наверное законный вопрос "а что если надо скобку или запятую добавить в качестве элемента строки значения или имени?" Добавлю ответ: при внесении таких "служебных" символов, они преждевременно должны отражаться в строке в качестве "псевдо-значений" в виде (например) "[/$запятая]", что при выдаче имени или значения на выходе преобразуется в соответствующий символ
0
|
||
|
Модератор
|
||
| 07.11.2019, 21:47 | ||
|
весьма мохоже на JSON, только разделители иные
1
|
||
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
||
| 08.11.2019, 10:09 [ТС] | ||
|
Но текущей конструкции уже 19 лет и на ней построено очень много потоков и приложений и переделать не представляется возможным. Не понятно чем занимается VBA перебирая строку через байтовый массив ... почему так долго? Получается, что с одной стороны мы пытаемся экономить на преобразованиях типов, на операциях ... а он и без нас - тратит ТАМ огромное количество ресурсов не понятно на что?! и наши попытки оптимизации значительно менее эффективны чем мы ожидаем ...
0
|
||
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
|
| 08.11.2019, 18:29 [ТС] | |
|
Из того что пока найдено: http://www.xbeat.net/vbspeed/index.htm
+ спасибо shanemac51 за подсказку
0
|
|
| 08.11.2019, 18:29 | |
|
Помогаю со студенческими работами здесь
6
Быстрый парсинг огромного txt файла (800 мб)
Быстрая работа с xlsx
Быстрая работа с графикой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|