Brodyaga

Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Код: <?php ini_set("memory_limit","0M"); $num_parts=20; $filename="new.txt"; $fsize=filesize($filename); $part=ceil($fsize/$num_parts); $sum=0; for($i=0;$i<=$num_parts-1;$i++){ $parts[$i]=$part; $sum+=$part; } $lastpart=$fsize-($sum-$part); $parts[$num_parts-1]=$lastpart; $fpm=fopen($filename,"r"); $fpa=fopen("$filename.tmp","w"); foreach($parts as $k=>$v){ $from=array_sum(array_slice($parts,0,$k)); $to=$from+$v; fseek($fpm,$from); $fp=fopen("$filename$k","w"); fwrite($fp,fread($fpm,$v)); fwrite($fpa,join("",array_unique(file("$filename$k")))); fclose($fp); unlink("$filename$k"); } fclose($fpa); $fpa=fopen("$filename.new","w"); fwrite($fpa,join("",array_unique(file("$filename.tmp")))); fclose($fpa); unlink($filename.".tmp"); ?> | Тестировался на файле с 400000 записями, 12 с лишним мегабайт. На скорую руку, основная идея разрезание файла. Однозначно что он кривоват(2 цикла это слишком), но пока в голову лезет всякая чушь Добавлено: Кстати, файл 400000 записей я заполнил md5 хешами случайных чисел от 1 до 2000, и что интересно, 12 мегабайтный файл без повторений стал размером 65 кб Вот тебе и псевдослучайность
| Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 14:38 11-09-2006 | Исправлено: Brodyaga, 14:43 11-09-2006 |
|