|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
||||||
Быстрая работа со строкой (быстрый парсинг)07.11.2019, 14:22. Показов 2219. Ответов 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
Быстрая работа с графикой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|