Другие языки программирования и технологии

Как подсчитать дубли строк в текстовом файле?

Может кто нибудь привести код на делфи 7 Или хотябы алгоритм по такой задаче:на входе есть БОЛЬШОЙ текстовый файл (больше ста тысяч строк), нужно подсчитать кол-во дублей строк в этом файле. т.е.:'орпгорор' 10 штук'лоршшг' 3 штуки'лорапе' 1 штука.........
По-моему, для более чем ста тысяч строк и хеш-сортировки нужно много-много (неизвестно сколько, причём) памяти (чтобы избежать коллизий) , так что лучше сделать по-паскалевски - сделать файловую переменную и, считывая построчно, создавать в динамической памяти список из записей типа строка-количество. То есть считали строку, идём по списку, пока не встретим строку >= нашей новой или конец списка, если нашли её же, то увеличиваем счётчик, иначе вставляем в список новый элемент; либо по-дельфийски (в моём представлении) - считать файл в TStringList, сделать List.Sort (не знаю, насколько быстро он отсортирует стотысячестрочный файл... ) и пройти по списку, считая количество стоящих подряд одинаковых строк.
А можно, считывая построчно, создавать не просто список, а TStringList из пар строк -сама строка, а за ней - строка с количеством, тогда можно будет сначала проверять наличие новой строки в списке встроенным в TStringList методом быстрого поиска.

Могу реализовать за интерес, коль попросите, то есть если сам никак)
ЕП
Евгений Прамен
901
Лучший ответ
можно сделать так
проходимся по строкам - для каждой вычисляем значение какой-нибудь хеш функции
этому значению соотв счётчик в карте (map)
после этого убираем все элементы из карты у которых значения счётчика = 1
число оставшихся элементов и есть ваш ответ

PS: могу реализовать за небольшое вознаграждение
Илья Казаков
Илья Казаков
5 701
не совсем понял вопрос.. . дубли строк - имеется в виду, что строка повторяется неоднократно в тексте? или буквы дублируются внутри строки?
Максим
Максим
4 444