|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
Автоматическое чтение и сравнение строк в txt19.12.2019, 23:14. Показов 3116. Ответов 27
Здравствуйте, есть такая необычная задачка:
Есть три txt файла Файл Base1 -єталонный основной отсортированный список неповторяющихся слов Размер файла 10гб! Файл Test1 - список слов которые надо проверить на совпадение с файлом Base1.txt Размер файла от 500мб Файл Check1 - построчный список слов совпавших при сравнении файлов Word1 и Test1 В итоге программа должна работать по такому принципу: При нажатии кнопки идет построчное сравнение двух файлов, Base1 и Test1 соответственно. Если 1 или больше совпадений в Test1 найдено с основным файлом, то совпавшие строчки пишутся в Check1. Важно: у меня уже есть похожая програмка написанная добрым человеком на Дельфи, но у нее есть существенный минус, она работает в один поток и много времени тратися на обработку одного прохода. Возможно ли распаралелить хотя б 4/6/8/10 потоков ? Мне не обязательно раскрывать код, можете просто дать экзешку в личку. P.S. Не надо бомбить, злорадствовать и посылать курить форум, кто захочет тот пусть поможет.
0
|
|
| 19.12.2019, 23:14 | |
|
Ответы с готовыми решениями:
27
Сравнение строк в структуре, чтение из файла Автоматическое чтение и сравнение значений в txt |
|
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
|
|
| 19.12.2019, 23:50 | |
|
Я бы сперва подготовил файл test1, отсортировав его. Есть такая возможность?
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
| 19.12.2019, 23:54 [ТС] | |
|
Извините, забыл уточнить. Да файл "test1" - отсортирован!
0
|
|
|
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
|
||||||
| 20.12.2019, 01:35 | ||||||
1
|
||||||
|
Мозгоправ
|
|
| 20.12.2019, 04:17 | |
|
Waitman, не откроете секрет, как вы измудрились получить "список неповторяющихся слов" на 10гб?
![]() Я вот сейчас попробовал в обычном редакторе взять текст книги на английском языке (960 страниц, размер текстового файла около 2Мб) и сделать из него отсортированный список неповторяющихся слов. Получилось около 80 килобайт, 8836 слов (регистр учитывается). Как вы измудрились получить такой объём? Все слова на всех языках мира? (Т.е. UCS-16 в лучшем случае, UTF-8 - в худшем. Не?)Файл Test1 принципиально не сортированный? Добавлено через 2 часа 22 минуты Waitman, есть одна мыслишка. Вы можете заархивировать и выложить куда-нибудь в доступное место достаточно большие куски файлов Base1.txt и Test1.txt что бы было на чём потестировать скорость работы? Скажем по 1/10 от объёма одного и другого файла.
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
| 20.12.2019, 22:09 [ТС] | |
|
"Попробуйте так, но всё упрётся в скорость чтения с диска."
Значит так, запустил прогон файла 8.5мб по базе (12гб), окно консоли пропало через 1м46с, файл Check1 пустой, скорее всего код даже не прошел и части. Загружено было только 1 ядро. Тот же прогон моей програмкой на Делфи дает контрольный результат совпадения в файл Check1. Прогон занимает 34минуты, загружено естественно одно ядро. Waitman, не откроете секрет, как вы измудрились получить "список неповторяющихся слов" на 10гб? Я вот сейчас попробовал в обычном редакторе взять текст книги на английском языке (960 страниц, размер текстового файла около 2Мб) и сделать из него отсортированный список неповторяющихся слов. Получилось около 80 килобайт, 8836 слов (регистр учитывается). Как вы измудрились получить такой объём? Все слова на всех языках мира? (Т.е. UCS-16 в лучшем случае, UTF-8 - в худшем. Не?) Файл Test1 принципиально не сортированный? Файл Test1 - сортированный! Добавлено через 2 часа 22 минуты Waitman, есть одна мыслишка. Вы можете заархивировать и выложить куда-нибудь в доступное место достаточно большие куски файлов Base1.txt и Test1.txt что бы было на чём потестировать скорость работы? Скажем по 1/10 от объёма одного и другого файла. Это не просто слова а коды буква и цифры, я просто при описании задачи условно назвал словами. Так что подойдет любой список на Ваше усмотрение. Даже банально: Alexander Andrea Andreas Angelika Anja Anna Barbara Bernd Berndt Bernt Birgit Brigitte Carin Cathrin
0
|
|
|
Мозгоправ
|
|
| 21.12.2019, 02:05 | |
|
Waitman, ещё раз уточните: оба входных файла отсортированы?
В файле Test1.txt примерно с какой вероятностью попадаются слова, которых нет в Base1.txt? Файл Check1.txt должен быть отсортирован или это не обязательно? Добавлено через 28 минут И ещё вопрос. Как часто изменяется файл Base1.txt? Каждый новый поиск с новым Base1? Или несколько поисков с неизменным Base1?
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
| 21.12.2019, 11:29 [ТС] | |
|
Waitman, ещё раз уточните: оба входных файла отсортированы?
Да, именно так все файлы обязательно отсортированы! В файле Test1.txt примерно с какой вероятностью попадаются слова, которых нет в Base1.txt? 99% другие значения Файл Check1.txt должен быть отсортирован или это не обязательно? - нет разницы Добавлено через 28 минут И ещё вопрос. Как часто изменяется файл Base1.txt? Каждый новый поиск с новым Base1? Или несколько поисков с неизменным Base1? - Base1 не меняется никогда, там скажем так, константы.
0
|
|
|
Мозгоправ
|
||||||
| 21.12.2019, 18:44 | ||||||
Сообщение было отмечено Waitman как решение
Решение
Waitman, попробуйте для начала самое простое:
Напишите, как у вас работает на реальных данных. То, что Base1 не изменяется - это хорошо. Есть простор подумать ещё.
2
|
||||||
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
| 21.12.2019, 22:30 [ТС] | |
|
А может быть проблема в том что я компилю код в Dev-C++ ? Компилится без проблем, ошибок и прочего.
Значит так: Експеримент 1: Взял простой шаблонный файл 1кб (около 80 строк) в качестве базового и в другой закинул рандомное слово с первого. Слова а-ля "Heinz". Итог: и первый и второй код находят контрольное слово за 1 сек. Експеримент 2: Что б долго не ждать, взял средний шаблонный файл 48мб в качестве базового и в другой закинул рандомное слово с первого. Слова а-ля "bruckmann". Итог: Первый Ваш код за секунду находит котрольную строку. Второй код просто появляется и пропадает окно и все никакого результата. Експеримент 3: На микро файле в 8мб с моими строчками ни 1 ни 2 файл результата не дают, просто через секунду пропадают окна. Но ВАЖНОЕ уточнение у меня каждая строка по 40 знаков! А в тех шаблонных файлах с интернета ну максимум 10, может они банально не влезают ? Добавлено через 7 минут P.S Контрольный тест: База шаблонная из нета 2гб, тест файл 48мб ( все строки из него есть в большом файле) - результат: первый код за 4 сек дает ожидаемый результат! второй код - закрывается через 1 сек. Так что первый Ваш код работает хорошо но видимо ему не нравятся длинные строки...
0
|
|
|
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
|
||||||
| 21.12.2019, 22:38 | ||||||
|
Waitman, давайте посмотрим, что там внутри. Скиньте diff.txt после выполнения этого кода:
0
|
||||||
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|||
| 22.12.2019, 00:10 [ТС] | |||
|
C++\3\main.cpp [Error] 'foo' does not name a type C++\3\main.cpp [Error] 'foo' was not declared in this scope компилю код в Dev-C++ На шаблонном сравнении 2гб и 48мб файл с правкой system("pause"); пишет --- simpleFind: Elapsed time: 2887ms и странно но дает 100кб строк, хотя должно давать 48мб как и код №1. На моей базе пишет --- simpleFind: Elapsed time: 11ms и все.
0
|
|||
|
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
|
||||||
| 22.12.2019, 00:23 | ||||||
|
Кликните здесь для просмотра всего текста
0
|
||||||
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
||
| 22.12.2019, 11:50 [ТС] | ||
|
nalbe666
очередная ошибка: C++\3\main.cpp [Error] no matching function for call to 'std::basic_ifstream<char>::basic_ifstre am(std::string&)' 2) Компилятор TDM-GCC 4.9.2 64bit
0
|
||
|
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
|
|
| 22.12.2019, 12:41 | |
|
Waitman, С ваших файлов Check1 получился такой же как и Test1, 100% совпадений. Это первым кодом, так что попробуйте его готовым приложением по ссылке https://drive.google.com/open?... oyln0noZy0
Единственное место, где я вижу проблему, это если нарушена сортировка внутри файлов.
0
|
|
|
Мозгоправ
|
||||
| 22.12.2019, 19:13 | ||||
|
Смотрим ваш Test1: неотсортирован. Имеет 487945 повторов (4346588 - 3858643). Смотрим ваш Base1: неотсортирован. Добавлено через 3 минуты В Base1 имеются строки (одно слово на строку!), содержащие пробелы. Добавлено через 2 часа 27 минут Waitman, так что сравниваем? Всё со всем по несортированным файлам?
1
|
||||
|
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
|
|
| 22.12.2019, 22:10 [ТС] | |
|
Все люди врут. (с) Доктор Хаус - я также люблю данный сериал. Но:
Вы спрашивали про то отсортированны ли файлы "МОИ СПИСКИ" - да они отсортированы. А то что я Вам скинул, это просто набор строк из инета чисто для теста. И я Вам писал, что Ваш код №1 их прекрасно обрабатывает, но мои отсортиванные списки где 40 знаков в строке он тупо игнорит. Waitman, так что сравниваем? Всё со всем по несортированным файлам? Сравнивается неменяющийся список из База1 с списком Тест1 который постоянно меняется. Base1 не меняется никогда, там скажем так, константы. Ещё раз уточните: это действительно так? Да, он не меняется никогда. Меняется только файл Тest1. А вот например такое: Файл База1 9GkWeNjwuMzVUXXM4MyRSg1TNbMkFoe2CCTPnm01 9GkWEu45KRYpiwyNhbvTvmcmoe9whuMeNzTPpp81 9GkwoSS9ngwfS5YdT2kb2x8NRxKXGTRCJYTPgh16 Файл Тест1 9GkWEu45KRYpiwyNhbvTvmcmoe9whuMeNzTPpp81 Результат вместо второй строчки - пустой файл ... Почему ? банально среди 3 строк найти 1 ...
0
|
|
|
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
|
|
| 22.12.2019, 22:21 | |
|
Waitman, мнда.
9GkWeNjwuMzVUXXM4MyRSg1TNbMkFoe2CCTPnm01 9GkWEu45KRYpiwyNhbvTvmcmoe9whuMeNzTPpp81 9GkwoSS9ngwfS5YdT2kb2x8NRxKXGTRCJYTPgh16 Вторая строка должна идти перед первой.
0
|
|
| 22.12.2019, 22:21 | |
|
Помогаю со студенческими работами здесь
20
Чтение из файла 'New.txt', запись четных строк в '1.txt', а нечетных в '2.txt'
Сравнение строк txt файлом Чтение строк из file.txt Чтение конкретных строк из txt (2 - 5) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|