php подсчитываем количество дублей в файле и записываем в базу
Пятница, 10 сентября 2010 г.
Просмотров: 6929
Настроение: неочень((, но надеюсь на лучшее
В колонках звучит: E-type - Angels crying [radio version]
Подписаться на комментарии по RSS
Думал долго как сделать нормальный подсчет количества повторений строк в файлах, удалять их дубли и писать сколько их было.
Написал простенький скрипт который ищет все дубли строк в одном файле и записывает их в другой файл в виде
строка1|количество дублей
строка2|количество дублей
..
получился скрипт который использует оперативную память по минимому и не загружает ее всеми данными, но за счет этого с большими данными скрипт будет обрабатываться долго(((.
поиск дублей происходит в циклах, и при больших объемах информации циклов становиться все больше и больше, но другого нормального решения для поиска дублей я ненашел((.
Есть какаято функция в php которая подсчитывает и выводит все дубли в массиве, но не в файле, а это значить что оперативная память будет хранить весь этот массив данных, что не есть гуд(.
кароче вот скрипт, я попробую еще ченить придумать как его оптимизировать под скорость, но пока идей нет((.
<?php $fileopen = 'links.txt';//файл в котором будем искать дубли $filesavebase = 'base.txt';//файл в который будем записывать все данные $links_file=fopen($fileopen, 'r');//открываем файл для сравнения с поиском $links_file_search=fopen($fileopen, 'r');//открываем файл для поиска $base_file=fopen($filesavebase, 'a+');//открываем файл для записи базы if ($links_file) { while(!feof($links_file)) { $data = trim(fgets($links_file));//переход к след строке сравнения с поиском //поиск в базе fseek($base_file, 0);//сбрасываем указатель в файле базы на начало while(!feof($base_file)) { $database = fgets($base_file);//переход к след строке базы //проверка на повторение с базой if (stristr($database,$data)) { $goto='0'; } } //проверяем можем ли мы продожать или нет if($goto != '0'){ //поиск повторений $counter = 0; while(!feof($links_file_search)) { $str = fgets($links_file_search); if (stristr($str,$data)) { $counter++; } } fseek($links_file_search, 0);//сбрасываем указатель в файле поиска на начало //записываем в базу $dataputs= trim($data).'|'. trim($counter)."\r\n"; fwrite($base_file, $dataputs); } $goto='1';//переназначаем переменую } } //закрываем все открытые файлы fclose($links_file); fclose($links_file_search); fclose($base_file); ?>если кто сможет оптимизировать код, либо показать готовый пример который будет лучше, то я буду очень рад).
Еще записи по теме
- Парсинг RSS на PHP. Простой пример
- Что-то непонятное))) наверное предыстория какаято
- Время последней индексации страниц поисковиками
- Скрипт статистики поисковых запросов alexcounter version 3.7b
- Вывод аудиовыхода в кредл для loox 720
- Хорошая партнерка по запароливанию файлов
- Хобби приносит доход - это хорошо)))
Комментариев: 2
> если кто сможет оптимизировать код
Надо предварительно строить индекс по первому (или первым n-символам).
В этом случае при огромном файле он не будет проверять то, где точно нету ничего.
Спсибо))), я учту если понадобится этот код использовать снова.