Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549

Как быстро обрабатывать текст из файлов больших объёмов

16.07.2014, 16:16. Показов 2339. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, искал как быстро читать текст из файлов больших объёмов, наткнулся на функцию:

C++
1
long fd = open(sFilePath.c_str(), O_RDONLY | O_BINARY);
описывается, что она находится в: #include <fcntl.h>, файл заинклюдил, но билдер функцию не находит
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.07.2014, 16:16
Ответы с готовыми решениями:

Как хранить и обрабатывать массив больших элементов
Всем привет Есть некоторый буфер объёма 1 350 000 байт (значение конкретное в конкретном времени и месте, в принципе, возможно...

Обработка больших объёмов данных
Есть выделенная виртуальная память ReadCount=6 000 000 000 Buffer = (U16 *)VirtualAlloc(NULL, ReadCount*4, MEM_COMMIT,...

Алгоритмы сортировки больших объёмов данных
Здравствуйте, столкнулся со следующей проблемой: Имею бинарный файл, в котором хранится матрица из чисел размером примерно 10000 на 40....

17
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,912
Записей в блоге: 12
16.07.2014, 16:27
C++
1
#include <io.h>
вообще-то еще нужен.

Насколько большой объем файла?
1
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
16.07.2014, 17:22  [ТС]
780 мб

Добавлено через 52 минуты
С этим я справился) Как 24 миллиона строк можно избавить от дубликатов
0
1 / 1 / 1
Регистрация: 14.03.2014
Сообщений: 46
17.07.2014, 09:12
Брать в основу любой понравившийся метод сортировки и сравнивать строки, а найдя совпадения, удалять одну.
0
17.07.2014, 10:26

Не по теме:

Цитата Сообщение от hiphone Посмотреть сообщение
Как 24 миллиона строк можно избавить от дубликатов
Завуалированная форма "Как два байта переслать"?

0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
17.07.2014, 13:12  [ТС]
Единственный вариант, который я придумал: взять весь файл в память, потом построчно читать его же и уже фильтровать с теми строками, что в памяти, но мне кажется это очень долго будет


Будет ли быстрее работать с THashedStringList?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
17.07.2014, 17:29
Цитата Сообщение от hiphone Посмотреть сообщение
но мне кажется это очень долго будет
А проверить что мешает? Там уже и думать дальше будешь.

THashedStringList конечно пошустрее будет, но опять же, в какой мере - зависит от конкретных операций, что ты собираешься над ним совершать.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.07.2014, 17:53
Цитата Сообщение от BRcr Посмотреть сообщение
THashedStringList
навряд ли в нем поместится.
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
17.07.2014, 17:57
Цитата Сообщение от hiphone Посмотреть сообщение
Как 24 миллиона строк можно избавить от дубликатов
складывать в std::map в качестве ключа, если память не лопнет.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.07.2014, 18:09

Не по теме:

Цитата Сообщение от uglyPinokkio Посмотреть сообщение
складывать в std::map в качестве ключа, если память не лопнет.
Думаю лопнет ...


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

Проблема лишь в выбори хеш ф-ции и можно ли будет "сохранить" положение срок, ибо я так и не понял какого типа файл - текстовый или бинарный.
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
18.07.2014, 02:48  [ТС]
файл текстовый

Добавлено через 5 часов 0 минут
Всё получилось, использовал вектор. Файл 500мб читался и чистился от дублей 10 минут

C++
1
#include <vector>
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.07.2014, 07:39
А что ты делал с вектором? Удалял из него элементы-дубли?
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
18.07.2014, 12:44  [ТС]
Да, удалял дубли строк
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
19.07.2014, 09:13
Тогда лучше возьми std::list - должно куда быстрее отработать...
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.07.2014, 11:49
Цитата Сообщение от BRcr Посмотреть сообщение
Тогда лучше возьми std::list - должно куда быстрее отработать...
А может std::set<> тогда уже, только есть сомнения что не будет быстрее, а вот память с экономит, если много повторений встречается.
1
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
19.07.2014, 14:08  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
А может std::set<> тогда уже, только есть сомнения что не будет быстрее, а вот память с экономит, если много повторений встречается.
не будет быстрее чем list или vector?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.07.2014, 14:45
Ну достоинство вектора быстрая вставка в конец и дальнейший быстрый доступ при переборе с записью в файл, но тут проигрыш в сортировке.

В std::set<> сортировка не нужна и вставка сразу будет в "нужно место" с игнорированием совпадений (потенциальная экономия на этом памяти если совпадений много), но тем не менее вставка идет дольше (из-за поиска места вставки) и потеря при переборе при записи в файл ибо перебор через итераторы по set<> дольше перебора в std::vector<>
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
19.07.2014, 18:20
Да просто проверь и set, и list - что быстрее или экономичней окажется, то и используй.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.07.2014, 18:20
Помогаю со студенческими работами здесь

Выбор БД для больших объёмов данных
Собственно, планируется запись порядка 100-200к строк новостных лент (включая текст новостей) в сутки. Далее выборка по первичному ключу,...

Обновление больших объёмов данных(150к полей)
Доброго всем времени суток. Встала задача обновления больших объёмов данных - парсинг большого xls-файла и записи данных в MySQL....

Какой массив использовать для хранения больших объёмов информации?
В целях саморазвития пишу программу для поиска дубликатов файлов по названию. Алгоритм типа такого: в отдельном потоке происходит запись...

Как в excel 2007 обрабатывать ячейки, содержащие текст, заключенный в кавычки?
как в excel 2007 обрабатывать ячейки, содержащие текст, заключенный в кавычки? к примеру - ячейка содержит текст (без кв.скобок). И когда...

Как обрабатывать введенный пользователем текст, для дальнейшего его сохранения в MySQL
Всем привет, подскажите как мне обработать текстовое сообщение пользователя, так что бы в дальнейшем не возникало проблем с сохранением его...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru