О да, одинаковы. А на кроссплатформенность забить большой болт и даже не вспоминать о ней?
Дельфи не нужен вообще никому, кроме тех, кому нужно развивать старые проекты на этом языке или тем, кто просто привык и переходить на что-то адекватное нет желания. Использовать этот труп для чего-либо нового, а тем более осваивать этот язык - не имеет никакого смысла.
Вообще, сравнивать С(++) и дельфи неприлично :)
Delphi или C++?
C++.
Он был, есть и будет. А все остальное приходит и уходит.
Могу посоветовать Шилдта.
Хм, почитать можно про командную строку :)
Это обыкновенная консольная программа под винду. Должна запускаться даже двойным кликом (unique.exe) или из под командной строки (win+R => cmd)
BredoGen. добавил 07.12.2010 в 18:57
Может на неделе сделаю графический интерфейс с плюшками, а может со временем вырастет до комбайна для работы с ключами...
Стандартными средствами - никак.
Можете поискать парсер математических выражений на php, если очень нужно обойтись без eval();
Не сразу втыкнул, что ты имеешь в виду. Об одном и том же, в принципе. Но гемерно это все.
Если так рассчитать, то для обработки 300кк строк (где-то 10гб с лишним), нужно чуть более гига оперативы для хранения хешей, что не проблема для любого десктопа...
Но при таких объемах, чую, хеш начнет иногда повторяться, хоть это и не особо критично.
Сформулировал мысль в голове => Обдумал => [Сформулировал конкретнее|Передумал] => Обдумал еще лучше => [Напечатал|Передумал] => Нажал "Ответить".
На стенку, около рабочего места.
BredoGen. добавил 07.12.2010 в 11:15
Это если ключевики из символов кодируемыми одним байтом. Т.е юникод кириллица идет лесом и будет жрать целых 2 байта за символ... А это уже ~4гб, что уже дохрена :)
Тогда легче уже разбить файл на части и нормально обработать каждый (:
Ограничением будет только размер жесткого диска.
Строки занимают слишком много памяти, их лучше вообще не хранить.
Мой вариант:
Версия для винды: http://dl.dropbox.com/u/16333142/unique.tar.gz
Для Ъ & линуксоидов (исходники): http://dl.dropbox.com/u/16333142/unique_src.tar.gz
В памяти хранится контейнер с числовыми хешами. Т.е теоретически каждая строка [хеш каждой строки] будет занимать 4 байта. В реальности все не так хорошо и для обработки 80кк понадобится чуть больше.
По скорости вроде рвет всех и вся. Удалось скормить 26кк (900мб), как будет вести с более весомыми данными (и вообще на винде) - не знаю.
bredogen@debian:~/Работа/unique$ du file.txt 922104 file.txt bredogen@debian:~/Работа/unique$ wc -l file.txt 25994075 file.txt bredogen@debian:~/Работа/unique$ ./unique Path to file: file.txt Save to: my.txt Finished with 803047 unique lines! Time elapsed: 99775ms
512RAM
Файл размером в 900мб и 26кк строк спокойно поместился и обработался за 99секунд. У меня все работает, ЧЯДНТ? (:
80кк будет весить около 3гб... Как минимум 2гб оперативной памяти нужно будет, если там много уникальных строк.
Хранишь массив с хешами в памяти. Читаешь прострочно и сравниваешь. В чем проблема?
Нашел свой вариант на C++.
Консольная программа. Файл в 1кк строк (взят с newox.ru/free_base.php) обрабатывает в 3 раза быстрее варианта cat & sort & uniq.
Проверял на загруженной машине с 512RAM, камень селероновский. То есть понятно, что работать может намного быстрее.
Если еще нужно - могу скомпилить под винду или даже в приличный гуй обернуть.
BredoGen. добавил 06.12.2010 в 14:13
Как поведет себя с 80кк - без понятия.
cat source.txt | sort | uniq > result.txt
Винда загнется еще на cat, с большей долей вероятности :)