![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
klest |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.4.2011 Репутация: нет Всего: нет |
Есть файл logfile.txt из него нужно выбрать ("C:\Documents and Settings\Admin\Мои документы\Visual Studio 2005\Projects\C++21.Week1\C++21.Week1") такого типа подстроки находящиеся в кавычках при этом удалить одинаковые и записать их в отдельный файл.
Т.е. должно получиться: "C:\Documents and Settings\Admin\Мои документы\Visual Studio 2005\Projects\C++21.Week1\C++21.Week1" "C:\Documents and Settings\Admin\Мои документы\Visual Studio 2005\Projects\C++21.Week1\C++21.Week1\C++21.Week1.vcproj" "C:\Documents and Settings\Admin\Мои документы\Visual Studio 2005\Projects\C++21.Week1\C++21.Week1.sln" и т.д. Подскажите пожалуйста как это реализовать на С++!!! Это сообщение отредактировал(а) klest - 25.7.2011, 16:43 Присоединённый файл ( Кол-во скачиваний: 14 ) ![]() |
|||
|
||||
DeMoNN |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 21.3.2008 Репутация: 1 Всего: 2 |
Самый простой способ исключать одинаковые строки - использовать хеш-таблицу. Выдираешь строки, считаешь хеш, смотришь, есть ли он в хеш-таблице, если нет, то выводишь в файл и ставишь пометку в таблице.
Если же проблема именно в выдирании строк, то тут все просто - легко заметить, что эти подстроки встречаются в каждой строке и начинаются с 15-й кавычки, так что просто считываешь символы из файла по одному, отсчитаваешь 14 кавычек и начинаешь сохранять строку в переменной и попутно считать хеш. Как только встречаешь очередную кавычку - перестаешь, делаешь описанные выше действия с хеш-таблицей и переходишь к следующей строке. Делаешь так до конца файла. Если не знаешь, как реализовывать хеш-таблицу: заводишь достаточно большой булевый массив, берешь хеш от строки и берешь его по модулю длины массива, это и будет индексом текущей строки в этом массиве. Если пометка есть - строка встречалась, если нет - не встречалась. Можно взять несколько массивов разного размера (лучше, если это будут взаимно простые числа). Тут сам тогда сообразишь, как проверять наличие строки. Обычный полиномиальный хеш тут вполне подойдет. |
|||
|
||||
klest |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.4.2011 Репутация: нет Всего: нет |
Спасибо! Попытаюсь теперь все это реализовать)))
|
|||
|
||||
Silent |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 6 Всего: 9 |
а я всегда map для таких дел использовал, дешево и сердито:
|
|||
|
||||
klest |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.4.2011 Репутация: нет Всего: нет |
В связи с отсутствием опыта программирования, не получается написать код. Кто-нибудь может написать хотя-бы половину кода с пояснением чтобы можно было дальше разобраться?
|
|||
|
||||
DeMoNN |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 21.3.2008 Репутация: 1 Всего: 2 |
Код немножко говнистый, но рабочий:
|
|||
|
||||
klest |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.4.2011 Репутация: нет Всего: нет |
Спасибо огромное!!! Программа работает, только при запуске появляется вот эта ошибка. Ни знаешь, что это за ошибка?
Присоединённый файл ( Кол-во скачиваний: 8 ) ![]() |
|||
|
||||
Silent |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 6 Всего: 9 |
klest, не слушай DeMoNN'а, это самый натуральный г..нокод - через полгода, глянув на него, понять логику кода невозможно. Я бы сделал так:
проще, надежнее, читабельнее. В лог-файле есть несколько одинаковых путей, написанных с разными регистрами, что с ними делать - решать тебе, для них я оставил закомментированную строчку, если регистр неважен. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |