Чтение и сортировка данных из большого текстового файла

Drink666

Новичок
Чтение и сортировка данных из большого текстового файла

Возник вопрос ... есть большой файл с данными,превышающий размер оперативной памяти...нужно из него удалить все дубликаты...настав те пожалуйста дурака на путь истинный,подскажите в какую сторону копать ... заранее спасибо
 

MuXaJIbI41981

Новичок
можно попробывать занести всю инфу частями в базу чтобы не так много запросов получилось ... а потом выбрать выбрать все без дубликатов и записать обратно в файл .... но кажется это корявый метод :(
 

AmdY

Пью пиво
Команда форума
берешь строку, затем прогоняешь весь файл по строке и сравниваешь.
работать естественно не через file_get_contents()
 

phprus

Moderator
Команда форума
Drink666
man sort
Можно так-же почитать про алгоритмы внешней сортировки.
 

Drink666

Новичок
Автор оригинала: AmdY
берешь строку, затем прогоняешь весь файл по строке и сравниваешь.
работать естественно не через file_get_contents()
А это не будет затратно?По ресурсам и времени,если читать построчно fgets в цикле пока не будет конец файла ... мне кажется это будет очень трудоемкой задачей,для файла ~ 1-2 Гб ... а может и больше
 

SiMM

Новичок
> А это не будет затратно?
А в программировании почти всегда всё затратно, или по ресурсам, или по времени.
Если дубликатов очень много (т.е. уникальных данных - достаточно мало, чтобы хранить их в оперативной памяти), то задачу удаления дубликатов можно решить в один проход.
 

Фанат

oncle terrible
Команда форума
вообще-то, способ AmdY - это не читать построчно пока не будет конец файла, а читать построчно пока не будет конец файла столько раз, сколько строк в файле.
Иначе я не понял, с чем "сравнивать"
 

korchasa

LIMB infected
Drink666
Если у тебя не стоит задача изучить методы сортировки, то используй консольный sort, как уже было сказано выше.
 

Drink666

Новичок
-~{}~ 05.02.09 17:57:

Автор оригинала: SiMM
> А это не будет затратно?
А в программировании почти всегда всё затратно, или по ресурсам, или по времени.
Если дубликатов очень много (т.е. уникальных данных - достаточно мало, чтобы хранить их в оперативной памяти), то задачу удаления дубликатов можно решить в один проход.
Этот фактор не известен ,какого количество дублей и уникальных :(

-~{}~ 05.02.09 17:58:

Автор оригинала: korchasa
Drink666
Если у тебя не стоит задача изучить методы сортировки, то используй консольный sort, как уже было сказано выше.
я бы давно использовал ее ... но нет возможности это сделать ...
т.к потом надо будет удалить повторения из еще одного такого же большого файла и потом эти два файла соединить вместе так что бы в итоговом не было одинаковых слов из 1 и 2


Я прочитал много статей про сортировку ... но только никак не могу понять как стоки то сравнивать ... с цифрами то все понятно :) ... а вот со строками, по какому признаку ... даже не представляю...по длине строки,тогда получу не уникальные значения,а кучу строк с уникальной длинной :)
 

Фанат

oncle terrible
Команда форума
точно так же, как цифры.

-~{}~ 05.02.09 18:15:

Без размещения итогового массива в памяти я, кстати, не понял, как делать.

Имхо, только хэшировать строки, и ложить в память.
 

Drink666

Новичок
т.е нет разницы при сравнении ? Сравнивая 3 и 5 ,я получу тоже самое если буду сравнивать "qqqq" и "bbbb",т.е 1 или 0?
 

Фанат

oncle terrible
Команда форума
Нет, ты будешь получать "o1o1o"

-~{}~ 05.02.09 18:20:

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

Drink666

Новичок
Ммм....тогда не понимаю ... как их сравнить :( ....объяснить пожалуйста начинающему ...заранее благодарен
 

Фанат

oncle terrible
Команда форума
так же, как цифры
я в первый раз неразборчиво написал?
 

fixxxer

К.О.
Партнер клуба
хоспаде

cat file.txt | sort | uniq

или ты хочешь сказать что у тебя хостинг на винде?

если нет ssh и shell_exec etc зарезаны, то как минимум есть крон ;)

еще можно .sh скрипт положить в cgi-bin, поставить ему chmod 750 и начать его с

echo Content-type: text/plain
echo
 

Drink666

Новичок
эх ... я бы с удовольствием использовал "cat file.txt | sort | uniq",но увы этого сделать нельзя и выполнение скриптов с командами тоже ... я бы тогда не задавал вопрос тут :) ... а так надо самому все это написать и сделать
 

korchasa

LIMB infected
[offtop]
А ведь отличная проверка на вшивость, если делать ее на устном собеседовании. Строка S символов, файл размером L, частота повторений F. Назовите как можно больше способов оптимизации по используемой памяти, и объясните в каких случаях они не будут работать.
[/offtop]
 

fixxxer

К.О.
Партнер клуба
>> надо самому все это написать и сделать

студент чтоли? ну тогда учись ) кнута там почитай
 
Сверху