0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
||||||
1 | ||||||
Автоматическое чтение и сравнение значений в txt21.08.2018, 17:16. Показов 603. Ответов 13
Здравствуйте, есть такая на первый взгляд тривиальная задача. Но так как последний раз Делфи я открывал лет 10 назад то задача ввела меня в уныние.
Есть три txt файла Файл Word1 - основной отсортированный список неповторяющихся слов Файл Test1 - список слов которые надо проверить на совпадение с файлом Base1.txt Файл Check1 - построчный список слов совпавших при сравнении файлов Word1 и Test1 Кусок кода с проверкой в ручном режиме через Edit работает, правда в один поток и с подвисанием.. Но главное что не ест опертивную память, суть в том что файл Word1 со временем может достичь несколько ГБ и желательно что б опера не забивалась во время работы.
P.S. На хабре спрашивал у некоторых, мне ответили что через txt это идиотизм и надо делать через: SQLite с FTS4 в несколько потоков - вот тогда єто современно и быстро, но помочь никто не захотел. Честно пытался понять что это, о FTS4 не понял, ставил просто SQLite - с горем пополам удалось запусть ручной поиск по такой базе, но не впечатлило, ищет в раза два дольше чем мой код с txt файлом плюс в два раза места больше требует. Наверное я не умею готовить котов... Но мне надо просто рабочий инструмент, чем проще тем лучше...
0
|
21.08.2018, 17:16 | |
Ответы с готовыми решениями:
13
Автоматическое чтение и сравнение строк в txt Автоматическое сравнение строк в txt Сравнение извлеченных значений из txt-файла Чтение матрицы из файла txt, перестановка минимальных значений |
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
|
||||||
21.08.2018, 18:44 | 2 | |||||
Так попробуйте.
Файлы были в папке с программой, потому изменил имена.
1
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
22.08.2018, 00:41 [ТС] | 3 |
Здравствуйте! Попробовал, через 8-10 секунд - Out of memory. Размер файлов: Word1 - 300мб, Test1 - 1кб, Check1 - 0кб
При запуске программы размер процесса ~3мб, после нажатия кнопки размер быстро увеличивается и при 1 439 296 КБ вылетает вышеуказаная ошибка. Програма запускалась с SSD, загрузка процессора ~8%, свободной оперативной памяти при ошибке оствалось еще около 5гб. Подозреваю StringList.. Добавлено через 7 минут P.S При использовании файлов Word1 - 3кб, Test1 - 1кб, Check1 - 0кб, програма успешно проходит цикл, но в файле Check1 - весь список слов из Word1. Хотя там нет слов которые в Test1 (и там всего 5)..
0
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
23.08.2018, 01:09 [ТС] | 5 |
Толку от L.Free если код не делает то что должен.
0
|
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
23.08.2018, 02:05 | 6 |
А где есть эта задача? В вашем вопросе никакой задачи не сформулировано!
Там есть только кусок кода непонятно что делающий. А что он должен делать?
0
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
23.08.2018, 09:38 [ТС] | 7 |
Ну если Вам сложно связать несколько строк в одно, то вот:
Есть три txt файла Файл Word1 - основной отсортированный список неповторяющихся слов Файл Test1 - список слов которые надо проверить на совпадение с файлом Base1.txt Файл Check1 - построчный список слов совпавших при сравнении файлов Word1 и Test1 Читаем первую строчку с Test1.txt и гоняем ее по Word1.txt если есть совпадение - то пишем искомую строчку в Check1.txt если не нашли и дошли до конца файла Word1 то читаем вторую строчку с Test1.txt и так до окончания файла. Смысл в том что б выявить дубляжи слов которые есть в Test1 при сравнении с основным словарем - Word1. И показать только эти дубляжи в файле Check1. Вот основная задача. P.S Конечно в идеале хорошо б было что б програма могла использовать несколько ядер а не одно и показывать прогрес чтения файла Test1. Но я буду благодарен и просто за рабочую програму без свистелок и перделок.
0
|
23.08.2018, 09:48 | 8 |
может и есть толк?
ну и как вам уже сказали. без точного ТЗ результат ХЗ. как там у вас эти слова хранятся? одно в строке? через пробел, запятую?... для решения задачи неплохо бы видеть сами файлы а решение #2 для некоторых видов файлов выглядит правильным раз нам файлов не дали, то придумываем самостоятельно, все верно
0
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
23.08.2018, 10:29 [ТС] | 9 |
Файлы самые обычные, все слова цельные без пробелов, без знаков а-ля: /*-_+ и т.д Одно слово в строке
Например в файле Word1: Banjaxed Deadly Fag Gas Gob Paralytic Savage Scratcher Slagging Sound Wheesht В файле Test1: Nettle Plank Savage Scoops Программа на выходе в файле Check1 должна давать такой результат: Savage Поскольку Savage это единственное что есть общего в двух файлах Word1 и Test1. Добавлено через 6 минут Все файлы отсортированы предварительно от А до Я
0
|
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
|
||||||
23.08.2018, 10:38 | 10 | |||||
Поправьте у меня строку 14, не так понял.
0
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
23.08.2018, 17:59 [ТС] | 11 |
Спасибо! Начало коректно работать, жор памяти остановился на 1 479 168 КБ, правда сравнение 300мб и 20мб уже идет минут 5, закрузка процесса 8%, как возможно разбить задачу на потоки, ну например на 5-10 ? Читал за SetThreadAffinityMask - это оно ?
Добавлено через 5 часов 42 минуты По прошествии 5 часов программа все еще работает
0
|
23.08.2018, 20:25 | 12 |
такое бывает когда программист головой не думает
достаточно посчитать количество сравнений и умножить на время 1 сравнения советую загнать в табличку SQLite, проиндексировать и запросом выдать результат
0
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
23.08.2018, 20:36 [ТС] | 13 |
У меня есть тестовый вариант с поиском 1 слова по Edit по подключенной базе SQLite. Тот же самый файл в 300мб при поиске 1 слова дает 4 сек, еще и жрет пам'ять, если автоматизировать то выходит 10 000 слов будет шарашить 11 часов. Это абсолютно неприемлимо..
0
|
23.08.2018, 22:46 | 14 |
у меня в базе MSSQL есть таблица с адресами, поиск части адреса по колонке без индекса занимает 8-10 минут
в таблице 81 миллион строк почему мне не приходит в голову задавать вопрос по скорости в ветке по MSSQL?
0
|
23.08.2018, 22:46 | |
23.08.2018, 22:46 | |
Помогаю со студенческими работами здесь
14
Чтение из файла 'New.txt', запись четных строк в '1.txt', а нечетных в '2.txt' Чтение TXT (DXF) и вывод в TXT Чтение данных с одного txt файла, запись данных во второй txt в определенную позицию Автоматическое создание txt файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |