IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Работа с текстовыми файлами, Удаление повторяющихся слов из файла
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Суть задачи такая.
Нужно удалить из текстового файла повторяющиеся слова. Причем текстовый файл очень большой, порядка 200 000 строк и повторяющихся слов там тоже очень много smile.gif
Пример
мама
папа
мама
бабушка
дед
мама
Результат должен быть
мама
папа
бабушка
дед

Может это уже решалось здесь, но честное слово искал около часа. Находил тока работу с символами. Хотя может это и почти одно и тоже.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Решение включает в себя две основных задачи:
1. составление словаря;
2. поиск по словарю.

Поскольку размер словаря может быть весьма немалым, и заранее он неизвестен, то желательно использовать динамическую память. При указанном количестве строк и колличество слов может значительно превышать возможности сегмента (64К), так что придется структурировать. Если использование ТР не обязательно, то рекомендую взять 32-битный сомпилятор (например, FPC). Структурирование все равно весьма желательно для ускорения работы и уменьшения размеров. Структура базы данных (словаря) может быть как самой простой (слова в одном массиве of char, разделенные пробелами в алфавитном порядке), так и более сложной Например, блоки описанной струтуры, пронумерованные буквами - или парами, тройками букв.

Вот наглядная иллюстрация сказанного:

1-й способ (1):
а агат аз азот астра аська береза боб бор бочка вода воск восток дед дело дочь дочка

2-й способ с нумерацией одной буквой (2):
!а ? гат з зот стра ська !б ереза об ор очка !в ода оск осток !д ед ело очь очка

2-й способ с нумерацией двумя буквами (3):
1а ? 2г ат 2з ? от 2с тра ька 1б 2е реза 2о б р чка 1в 2о да ск сток 1д 2е д ло 2о чь чка

"?" означает слово без продолжение, только из нумерующих букв. Реально этот знак не нужен - два пробела подряд выполняют его роль.

Даже на глаз видно, что (2) выигрывает по объему по сравнению с (1).
Способ (3) на первый взгляд и сложнее, и места больше требует. Про сложность спорить не буду, но выигрыш в месте там будет заметен при бОльшем размере словаря.

Вот, примерно так.. Выбирай, что нарвится smile.gif. Или предложи свою реализацию..

Да, еще про поиск.. Его можно вести дихотомией с самого начала - либо можно хранить карту пронумерованных блоков. Внутри блока - дихотомия.. smile.gif

Ну, а само удаление слов - дело несложное.. ломать - не делать! smile.gif))))

PS
Уточни также, что считать разделителями слов. Надеюсь, только пробелы..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
dened   Работа с текстовыми файлами   1.05.2007 3:55
Lapp   Решение включает в себя две основных задачи: 1. со…   1.05.2007 10:51
dened   PS Уточни также, что считать разделителями слов. …   1.05.2007 16:07
dened   :( такое я не проходил, мона небольшой пример   1.05.2007 16:13
volvo   И тогда задача будет решаться в несколько строк, и…   1.05.2007 14:15
Lapp   И тогда задача будет решаться в несколько строк, …   1.05.2007 15:31
klem4   В принципе, если повторяющихся строк очень много и…   1.05.2007 16:02
klem4   Нельзя ...   1.05.2007 16:08
klem4   Упс а я это убрал уже ибо про массивы ни слова не …   1.05.2007 16:15
volvo   Это реально только для очень небольших файлов... Ч…   1.05.2007 17:21
klem4   Хм, если словарь не большой (не много разных слов)…   1.05.2007 17:22
volvo   Ну, со словарем из 10 слов естественно - ограничен…   1.05.2007 17:28
klem4   да .. сгенерил файл с рандомными словами, и прога …   1.05.2007 17:42
volvo   Программа, написанная с использованием списков (де…   1.05.2007 19:45
dened   Мой пример кода, как и говорил volvo работает офиг…   1.05.2007 23:03
volvo   Это решается довольно просто: { Пишешь функцию, к…   2.05.2007 1:36


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.01.2021 23:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name