Есть порядка 300 файлов, а в них есть повторяющиеся строки, в 1 файле повторов нет, а вот в 10 файлах может быть по 2 и более повторов, размер файла от 10КБ до 5ГБ, суммарный вес файлов ~40 ГБ, как можно дубликаты удалить?
Этот топик читают: Гость
Ответов: 1343
Рейтинг: 31
|
|||
карма: 2 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Всё время поражаюсь "умению" задавать вопросы.
![]() |
|||
карма: 25 |
|
Ответов: 8931
Рейтинг: 823
|
|||
Tad, а между строк
![]() "в 1 файле повторов нет" --- внутри файла строки не повторяются. "в 10 файлах может быть по 2 и более повторов" --- в разных файлах могут быть одинаковые строки, все их надо удалить, кроме одной. Отсюда и алгоритм. (А коллеге Rysik-у простительно, он и в 16 лет не совсем ясно выражал свои мысли, в 21 уже не исправишь ![]() |
|||
карма: 19 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
1.
Rysik писал(а): Есть порядка 300 файлов2. Rysik писал(а): в 1 файле повторов нет3. Rysik писал(а): а вот в 10 файлах может быть по 2 и более повторов4. Повторы с учетом регистра или нет. 5. Повторы в каждом отдельном файле или сквозное удаление ? И т.д. и т.п. Пойди туда не знаю куда, принеси то не знаю что Редактировалось 3 раз(а), последний 2018-02-25 16:42:54 |
|||
карма: 25 |
|
Ответов: 1926
Рейтинг: 172
|
|||
Rysik писал(а): Есть порядка 300 файлов, а в них есть повторяющиеся строки, в 1 файле повторов нет, а вот в 10 файлах может быть по 2 и более повторов, размер файла от 10КБ до 5ГБ, суммарный вес файлов ~40 ГБ, как можно дубликаты удалить?
Я так понимаю, вопрос только в быстродействии? Потому что с самим алгоритмом проблем быть не должно. Например, если это просто текстовые файлы, то поможет
И да, повторы искать только внутри каждого файла или между файлами тоже? |
|||
карма: 9 |
|
Ответов: 1343
Рейтинг: 31
|
|||
3042 писал(а): И да, повторы искать только внутри каждого файла или между файлами тоже?между файлами, какой бы ни был ArrayFilterRepeats, это неделю ждать?, железо с этими файлами справиться должно точно на ура (6 ядера по 4.3 и SSD M2.0), но вот методы увы не скоростные, пробовал 1 млн строк убирать дубликаты, это прям жёстко, минут этак за 10-20 выдало всего лишь 50000 строк (без подцепления копирования их в список) по идее хотелось бы собрать эту шляпу на 40 гб в 1 кучу, удалить повторения, срезать строки длинной более скажем 63 символов, пустые строки удалить и далее рассовать данные в файлы объёмом по пол гига --- Добавлено в 2018-02-26 13:28:52 Tad писал(а): Каких? Строки не только в txt-файлах.текст Tad писал(а): Это в ОДНОМ или в ПЕРВОМ ?в сами файлы вроде отформатированы до нормы, тоесть в них повторений быть не должно, а вот между файлами любыми друг по отношению к другу могут быть повторения, 2-5-10 повторений между файлами Tad писал(а): Повторы с учетом регистра или нет.кодировка, регистр, ну вобщем те строки у которых контрольные суммы равны Редактировалось 1 раз(а), последний 2018-02-26 13:28:52 |
|||
карма: 2 |
|
Ответов: 758
Рейтинг: 112
|
|||
Rysik, Если выложиш пример маленьких файликов, и схему раздумий, то можно дальше ускорять.
А так, можно сделать перебор всех строк во всех файлах. + подключить БД. Расчитываеш хеш строки и проверяеш есть такой хеш в таблице БД или нет. Если нет - добавляеш и переносиш строку в новый файл, иначе пропуск Удачи ![]() |
|||
карма: 1 |
|
Ответов: 1343
Рейтинг: 31
|
|||
miver писал(а): + подключить БДхорошая идея, но программа 2-х гиговый файл то не откроет, не говоря уже о переборе строк и связью с бд, это всё наоборот утежеляет процесс весь |
|||
карма: 2 |
|
Ответов: 758
Рейтинг: 112
|
|||
Rysik, А так
![]()
|
|||
карма: 1 |
|
Ответов: 8931
Рейтинг: 823
|
|||
miver, самый большой *.txt файл у меня нашёлся в 311 МБ, только без обработки перебрал все 5000000 строк за 18 мин
![]() И строки-то короткие, по два числа в ASCII ![]() ![]() |
|||
карма: 19 |
|
Ответов: 758
Рейтинг: 112
|
|||
Леонид, Вы их загрузили в форму? Только отрисовка убьёт кучу времени
|
|||
карма: 1 |
|
Ответов: 8931
Рейтинг: 823
|
|||
miver, нет, конечно, сначала в StrList, уже потом скопом на отрисовку
![]() ![]()
![]() |
|||
карма: 19 |
|
Ответов: 758
Рейтинг: 112
|
|||
Леонид, Вообще то я предлагал, что бы визуал отсутствовал
|
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Леонид, miver прав.
Судя по схеме, 18 минут - время загрузки в StrList + время загрузки в ListBox + время отрисовки. Насчёт БД miver тоже прав. Если применить SQLite то (теоретически) размер файла 140 Тб , но эта цифра зависит от версии SQLite3.dll |
|||
карма: 25 |
|
Ответов: 758
Рейтинг: 112
|
|||
Вот выбор уникальных строк в памяти через БД. Если памяти навалом то сделает очень быстро
|
|||
карма: 1 |
|