![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
lamber |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Стоит задача сравнить два текстовых файла построчно, если строки совпадают, то произвести замену т.к. файлы большие, в лоб перебором очень долго. Подскажите алгоритмы или уже может готовые решения, для этого класса задач. Очень нужно.
|
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
Т.е. совпадающие строки в файлах могут располагаться в любом порядке? Иначе не очень понятно, с чего должно быть "очень долго". |
|||
|
||||
lamber |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Да могу распологатся в любом порядке. Вот пример
первый файл some data key1 somedata key2 key3 somedata ... key_n второй файл key1=>value1 key2=>value2 key3=>value3 ... key_n=>value_n Нужно в первом файле заменить key на value файлы достаточно большие от 30-100мб (как первый так и второй) и если делать такой перебор в лоб это очень долго, даже не реально долго. Вот не знаю как к такой задаче подступиться. Буду очень признателен в помощи. |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
Понятно. Тогда, пожалуй, схема такая. Для одного из файлов (при такой структуре лучше для второго) надо предварительно сделать какой-нибудь индекс. Ну, например, сделать B+ дерево (хотя можно и просто алфавитное, чтобы возни было меньше). После этого последовательно читать первый файл и подставлять замены.
В принципе, такие штуки очень легко пишутся на языках, имеющих встроенные конструкции сопоставления с образцом (Пролог, Хаскель, ML и т.п.). Конкретно С и C++ для таких задач малопригодны. |
|||
|
||||
lamber |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Сенкс но из тех языков что перечислил ниодного не знаю, увы. Может кодом сможешь помочь или линки где можно было посмотреть.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |