Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
15 / 13 / 2
Регистрация: 21.12.2019
Сообщений: 246
RAD XE3+

Максимальная быстрая обработка текстовой базы данных

05.08.2021, 23:16. Показов 2770. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть задачи такая, у меня есть, для примера, 1 миллион строк, нужно провести с ними некие операции, это база данных,

Не по теме:

login@domen.ru:password

, нужно распарсить ее на логин, домен, пароль, обработать, например : заменить на ; , так же перевести их в нижний регистр и тд., в моем случае скорость очень медленная ~1500 строк в секунду. Какими способами можно увеличить скорость обработки строк, файл имеет только английские и специальные символы соответственно в кодировке Ansi. Чтение 1 строки занимает порядка 1 миллисекунды.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var
  i,q: Integer;
  pass: string;
  login: string;
  domen: string;
  delimetr: string;
  was_del: Boolean;
  fullStr: string;
  ch: Char;
....
        with Utils do
        begin
          for i := apos('@', fullStr) + 1 to length(fullStr) do
            if (fullStr[i] = ';') or (fullStr[i] = ':') then
            begin
 
              pass := Copy(fullStr, i + 1, Length(fullStr));
              login := Copy(fullStr, 1, apos('@', fullStr) - 1);
              domen := Copy(fullStr, apos('@', fullStr) + 1, (i - 1 - apos('@', fullStr)));
 
              if cb_SwitchDelimetr then // тут меняем ; на :
                delimetr := (new_delimetr)
              else
                delimetr := (fullStr[i]);
            end;
 
          if (length(login) < 5) and (length(domen) < 5) and (length(pass) < 5) then
          begin
            WriteUnknown(fullStr);
            begin
              fullStr := '';
              Continue;
            end;
          end;
так же там ее несколько функций, хотелось бы увидеть примеры очень быстро обработки строк. Так понимаю регулярка - это достаточно медленное решение, так вот хотелось бы узнать какие типы использовать для быстрой обработки ну и в целом как все можно ускорить
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.08.2021, 23:16
Ответы с готовыми решениями:

Поиск инфы обработка текстовой информации,формирование и обработка динамических массивов
Изучить работу с виртуальной памятью, проекциями файлов. обработку текстовой информации,работа с кучей. формирование и обработка...

Обработка двумерных числовых массивов(1) и обработка текстовой информации(2)
помогите пожалуйста, без этого зачёт не поставять. мне нужно (1) &quot;Найти минимум среди сумм модулей элементов диагоналей квадратной...

Динамические поля и обработка данных базы данных (mdb)
У меня вопрос. Создал базу данных mdb Acceess. Там таблицы и запросы. В Delphi создал форму для работы с данными БД, форма содержит...

24
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
08.08.2021, 17:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Silly_coder Посмотреть сообщение
1) разделитель может быть : или ; или вообще левым каким-то
2) Почты могут быть [email]----------@mail.ru[/email]:pass1 (нужно удалить все левые символы)
3) Почты могут быть [email]qw-------@mail.ru[/email]:pass1 (нужно удалить все левые символы)
4) Почты нужно привести все к нижнему регистру
5) Почты могут быть [email]----ww---@mail.ru[/email]:pass1 (нужно удалить все левые символы)
6) Почты могут быть [email]User__Gamer@mail.ru[/email]:pass1 (но такого быть не может согласно правилам почт, поэтому нужно удалить __, но это может быть любой другой мусор)
7) Нужно удалить все дубли строк
8) Нужно исправит фигню по типу [email]userUser@mail.ru[/email]:pass1 (дублирующийся логин)
9) Нужно удалить фигню по типу [email]user@mail@google.com[/email];pass1 (разные домены)
0
15 / 13 / 2
Регистрация: 21.12.2019
Сообщений: 246
08.08.2021, 19:29  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
2 млн строк за 7 секунд
у меня 50 миллионов за 10 секунд получается распарсить, задачку я решил с максимальными возможностями пк. В начале я делю файл на части, по количеству ядер пк -2, чтобы 2 ядра всегда были под другие задачи, т.е. допустим у меня 4 ядра, я делю на 2 файла и каждый файл обрабатываю в своем потоке, у меня I5-7600k грузится в 30% 1 потоком, в 2 потока соответственно 60% и получается в 2 раза быстрее обрабатывать, я просто думал сильно ли зависит тип данных для скорости или не особо я выиграю. Если я выиграю минуту - фигня, а вот если хотя бы 5 минут при обработке 100 миллионов строк - уже весомый результат.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
08.08.2021, 20:50
Цитата Сообщение от Silly_coder Посмотреть сообщение
у меня 50 миллионов за 10 секунд получается распарсить
То есть, 5 млн. за секунду. А то в теме было
Цитата Сообщение от Silly_coder Посмотреть сообщение
в моем случае скорость очень медленная ~1500 строк в секунду
потому и не понятно.
0
15 / 13 / 2
Регистрация: 21.12.2019
Сообщений: 246
08.08.2021, 23:09  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
потому и не понятно
это то ли баг, то ли еще что-то. В моем случае выходит примерно 50К строк в секунду, но думаю можно ускорить
0
15 / 13 / 2
Регистрация: 21.12.2019
Сообщений: 246
09.08.2021, 19:31  [ТС]
ошибся в моем случае за секунду примерно 2500 строк
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.08.2021, 19:31

Обработка базы данных несколькими потоками
Пишу программу, которая обрабатывает базу данных, при том каждую строчку обрабатывает один поток. Вот код: HANDLE hThread; using...

Обработка исключения подключения базы данных
Есть приложение, которое работает с базой данных. При запуске приложения высвечивается на странице (элемент page) две кнопки:...

Создание базы данных с использованием MySQL и обработка на PHP
дравствуйте! Помогите пожалуйста с этим заданием.помогите пожалуйста создать.. 1. Разработать базу данных для форума. 2....

Обработка нажатия на элемент списка, созданного из базы данных
Собственно тема такая.. Есть список песен с динамическим поиском, который, формируется с помощью SimpleCursorAdapter, а идет из базы...

Создание базы данных с использованием MySQL и обработка на языке PHP
Здравствуйте! Помогите пожалуйста с этим заданием


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru