powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Быстрый парсер в потоках
37 сообщений из 37, показаны все 2 страниц
Быстрый парсер в потоках
    #39955594
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, а какие есть подходы к быстрому парсингу текста? Не занимался этим никогда. Для простого парсинга я использую TPerlRegEx, но когда важна скорость, это видимо не подходит?
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955604
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блочное чтение, конечный автомат.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955614
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Что парсишь?
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955631
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О потоках говорить рановато.

Надо сначала исследовать возможности однопоточного парсера. И улучшить его.
Для начала выкинув Perl и регулярки.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955635
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster, базу RIPE. Регуляркой это просто..
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955636
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, ну это я понял со слов Dimitry Sibiryakov. Конечный автомат.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955651
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может там никаких регулярок не надо?
https://www.ripe.net/manage-ips-and-asns/db/support/querying-the-ripe-database
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955656
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11, когда формат JSON, то конечно не нужен, но у меня в другом формате, в старом текстовом. Не спрашивайте почему. Так нужно
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955657
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример текста ?
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955664
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev,

Объект inetnum

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
inetnum:         217.150.32.0 - 217.150.32.255
netname:         TTK-OFFICE-NET
descr:           Transtelecom Office Network
descr:           Moscow, Russia
country:         RU
admin-c:         KTTK-RIPE
tech-c:          KTTK-RIPE
status:          ASSIGNED PA
remarks:         INFRA-AW
mnt-by:          TRANSTELECOM-MNT


Объект route

Код: plaintext
1.
2.
3.
route:           217.150.32.0/19
descr:           RU-TRANS-TELECOM-20010213
origin:          AS20485
mnt-by:          TRANSTELECOM-MNT
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955665
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

вот эту реализацию регэксов рекомендовали по скорости, можешь попробовать посмотреть:
https://github.com/BeRo1985/flre/
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955670
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тут без регулярных выражений делается за 5 минут ...
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955672
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev, формат может меняться, многие данные национальные, формат не строгий относительно пробелов и табуляции. Вам может и 5 минут ))
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955674
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этой задаче действительно регулярка не очень нужна. Ну тоесть она нужна
так-же как пушка при стрельбе по мелким птичкам.

Вы простой строковой операцией решите эту задачу быстрее.

Только разбейте файл на
1) Строки
2) Проперти вида {ключ} ":" {значение}

Это можно сделать с помощью базового функционала строк в любом ЯП.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955679
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, разбитие, приведение это долго
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955680
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb, я знаю что такое Ripe-Db.

Это оуенный файл длиной в несколько гиг который никогда ни при каких обстоятельствах не помещается
в одну строку. Тебе придется его парсить частями.

Надеюсь ты это понимешь и не переоцениваешь возможности Regex-механики. Она вообще создавалась
не для таких задач. Не для ETL.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955681
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbразбитие, приведение это долго

"Не верю!" (с)

Код показывай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955684
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, его еще написать надо
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955685
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, конечно парсить частями
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955686
cptngrb,

Количество строк = количество элементов в массиве
Key : Value

Делятся по : А значит нам надо найти только : и скопировать лево и право. И стандартный trim. И загнать всё в массив.


Ты можешь кстати просто хранить ключи, и на них индексы. Что бы в онлайне получать знания из файла, для экономии самой памяти.


Это на миллиард таких элементов должно работать моментально.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955689
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
cptngrbразбитие, приведение это долго

"Не верю!" (с)

Код показывай.

cptngrb
Dimitry Sibiryakov, его еще написать надо

Оптимизация несуществующей программы с целью повышения её производительности или компактности - эта тема страниц на десять обсуждения потянет, как бы тема про FreeAndNil не потонула позабытой.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955691
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Для начала выкинув Perl и регулярки.

Может оказаться, что более оптимальным будет выкинуть Delphi.
Perl хорошо подходит для обработки текстов.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955692
Alibek B.,

Надо выкинуть программиста!
Регулярку ещё надо написать

Вдруг у него регулярка на 100 символов. И в придачу ещё 5 вызовов за раз на парс
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955694
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
Dmitry Arefiev, формат может меняться, многие данные национальные, формат не строгий относительно пробелов и табуляции. Вам может и 5 минут ))

Формальный синтаксис есть ? Или это биг дата :)
Ну даже если исходить из умозрительных вариаций синтаксиса и того что ты сказал, то особо это ничего не меняет. Хорошо, не "5 минут", но пол дня.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955695
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbего еще написать надо

Тогда с какого перепою ты решил, что "это долго"?

SetTextBuf с буфером в 32/64к - ускорит чтение в разы. Разбиение на строки делается ReadLn
автоматически. Pos, конечно, помедленнее strchr() будет, но вряд ли заметно. Copy и trim -
да, тут могут быть вопросы из-за выделения/копирования памяти и в принципе можно поплясать
с бубном. Если действительно прижмёт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955698
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрел, почитал, попробую с байтами напрямую поработать. Текст представлен массивом байт, а там уже перевод в строку много времени занимает.
Накидали мне путей решения, буду пробовать что мне конкретно подойдет.
Всем спасибо
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955699
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev, не биг дата)) тестовые данные раскрыть не могу, ripe похож просто по структуре но не один в один
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955701
Dimitry Sibiryakov,

Скорее всего у него проблема где - то в другом, совершенно не в регулярках. А если и в них, то в шаблоне
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955703
cptngrb,

Не работай с string, работай с PWideChar и никаких конвертаций не будет

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
var
  Buffer: TArray<Char>;
  W: PWideChar;

begin
  try
    SetLength(Buffer, 3);
    Buffer[0] := 'A';
    Buffer[1] := '4';
    Buffer[2] := '6';

    W := PWideChar(Buffer);
    if W <> '' then
      Writeln(W);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.




Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
FileRead.dpr.45: Buffer[0] := 'A';
0041E5BE A1DC684200       mov eax,[$004268dc]
0041E5C3 66C7004100       mov word ptr [eax],$0041
FileRead.dpr.46: Buffer[1] := '4';
0041E5C8 A1DC684200       mov eax,[$004268dc]
0041E5CD 66C740023400     mov word ptr [eax+$02],$0034
FileRead.dpr.47: Buffer[2] := '6';
0041E5D3 A1DC684200       mov eax,[$004268dc]
0041E5D8 66C740043600     mov word ptr [eax+$04],$0036
FileRead.dpr.49: W := PWideChar(Buffer);
0041E5DE A1DC684200       mov eax,[$004268dc]
0041E5E3 A3E0684200       mov [$004268e0],eax
FileRead.dpr.50: if W <> '' then
0041E5E8 A1E0684200       mov eax,[$004268e0]

...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955719
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
Dmitry Arefiev,

Объект inetnum

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
inetnum:         217.150.32.0 - 217.150.32.255
netname:         TTK-OFFICE-NET
descr:           Transtelecom Office Network
descr:           Moscow, Russia
country:         RU
admin-c:         KTTK-RIPE
tech-c:          KTTK-RIPE
status:          ASSIGNED PA
remarks:         INFRA-AW
mnt-by:          TRANSTELECOM-MNT

Объект route

Код: plaintext
1.
2.
3.
route:           217.150.32.0/19
descr:           RU-TRANS-TELECOM-20010213
origin:          AS20485
mnt-by:          TRANSTELECOM-MNT


тут регулярки не нужны, т.к. есть четко определенные разделители в виде двоеточия и сколько там пробелов - это уже не важно.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955723
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Человек любит регулярки. Что тут поделать. Пускай сделает на них.
Не устроит - будем искать причины performance issues.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955726
mayton,

Я бы не доверял ТС насчёт регулярок. Какие - то регулярки, чего - то медленно. Почему бы не классический TRegEx
http://docwiki.embarcadero.com/Libraries/Rio/en/System.RegularExpressions.TRegEx.Matches
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955728
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошли сутки с момента публикации топика. Я-бы уже написал работающее решение.

Афтор. Что у тебя уже есть написанного? Заготовочка. Макет.
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955734
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, пока написал в лоб разбор по байтно, сейчас тестирую на правильность, сравниваю с результатом регулярки
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955736
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный, ansichar достаточно
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955739
cptngrb,

22130116

То есть всё будет на английском без иероглифов и так далее ?Ну тогда следи что бы ничего лишнего в базу не залетало
...
Рейтинг: 0 / 0
Быстрый парсер в потоках
    #39955854
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор а откуда ты качал и какой файл?

Я вот смотрю сюда https://ftp.ripe.net/ripe/dbase/
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Быстрый парсер в потоках
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]