С нами с 27.02.04
Сообщения: 926
Рейтинг: 47
|
Добавлено: 08/06/08 в 16:46 |
Понадобилось проверить списочек кейвордов, есть скрипт для простой проверки на уникальность, то есть он выдает результат с уже удаленными повторяющимися строками, а мне нужно знать какие строки были не уникальными (дублированными).
Может кто встречал сервис, скрипт нужен для единоразовой проверки,заказывать не очень хочется
|
|
|
|
С нами с 19.10.05
Сообщения: 351
Рейтинг: 755
|
Добавлено: 08/06/08 в 20:46 |
Код: | <?
$input_file=file('input.txt'); // грузим файл с кеями
$output_file="output.txt"; // сюда пишем отчищенный от дубликатов
$dublicat_file="dublicat.txt"; // тут дубликаты
$mas=array();
for($i=0;$i<count($input_file)-1;$i++){
for($z=($i+1);$z<count($input_file);$z++){
if (strcasecmp(trim($input_file[$i]), trim($input_file[$z])) == 0) {$mas[]=$input_file[$i];}}}
$f=fopen($output_file,"w");fwrite($f,implode("",array_unique($input_file)));fclose($f);
$f=fopen($dublicat_file,"w");fwrite($f,implode("",array_unique($mas)));fclose($f);
?> |
|
|
|
|
С нами с 27.02.04
Сообщения: 926
Рейтинг: 47
|
Добавлено: 08/06/08 в 21:19 |
Спасибо -=Faraon=-, +4 к рейтингу и респекты прилагаются
|
|
|
|
127.0.0.1
С нами с 26.04.06
Сообщения: 1092
Рейтинг: 557
|
Добавлено: 08/06/08 в 23:20 |
как все сложно-то... проще надо быть, проще
Код: |
<?
#зохавать в массив
$a1=explode("\n",str_replace("\r",'',chop(file_get_contents("input.txt"))));
#зосортировать
sort($a1);
#определить дубли
$a2=array();
foreach($a1 as $n=>$v) {
if ($a1[$n-1]==$a1[$n]) {$a2[]=$v;}
}
#зописать резалт
$z=fopen("output.txt","w");
fputs($z,join("\n",array_unique($a2)));
fclose($z);
?>
|
вот собственно и все, строки, которые были дублировоны записаны в output.txt
|
|
|
|
С нами с 21.07.06
Сообщения: 494
Рейтинг: 253
|
Добавлено: 09/06/08 в 06:09 |
А если нужно локально, есть прога под винду - Text Duplicate Killer называется.
|
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 09/06/08 в 14:40 |
localhost писал: | как все сложно-то... проще надо быть, проще
|
Можно быстрее без сортировки...
Код: |
<?php
#зохавать в массив
$a1=explode("\n",str_replace("\r",'',chop(file_get_contents("input.txt"))));
$a2=array();
foreach($a1 as $v) {
$a2[$v]=isset($a2[$v])?1:0;
}
#зописать резалт
$z=fopen("output.txt","w");
fputs($z,join("\n",array_keys($a2,1)));
fclose($z);
?>
|
|
|
|
|
127.0.0.1
С нами с 26.04.06
Сообщения: 1092
Рейтинг: 557
|
Добавлено: 10/06/08 в 11:49 |
сортировка как раз нужна, все строчки будут отсортированы и дубли будут находится следом друг за другом, а потом нужно проверять лишь равна предыдущая строчка текущей и если да, значит дубль
|
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 10/06/08 в 11:57 |
Ясное дело, что она нужна в Вашем алгоритме.
Только трудоёмкость сортировки в общем случае растёт в квадрате.
А потом ещё и монстр array_unique
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 10/06/08 в 12:32 |
а можно еще так приколоться.
$fp=fopen("output.txt","w");
foreach (array_count_values(file('input.txt')) as $n=>$k) {if($k>1) fwrite($fp,"$n\n") ;}
fclose($fp);
на самом деле, на больших файлах самый правильный вариант делать из шела sort, а потом построчную сверку строк.
В пхп все команды использующие массивы жрут уйму памяти (до 5 раз больше обьема самих данных в массиве).
|
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 10/06/08 в 13:24 |
bog писал: | а можно еще так приколоться.
|
Да. Это решение ещё лучьше. И далеко не прикол.
|
|
|
|
С нами с 18.08.04
Сообщения: 6376
Рейтинг: 4430
|
Добавлено: 10/06/08 в 16:14 |
Бля а можно еще так Код: |
fwrite(fopen('uniq.txt',"w"),implode(' ',array_unique(explode("\r\n",file_get_contents('raw.txt'))))); |
охуеть в одну строку ) скобок может не хватать
|
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 10/06/08 в 22:25 |
dDan писал: | Бля а можно еще так Код: |
fwrite(fopen('uniq.txt',"w"),implode(' ',array_unique(explode("\r\n",file_get_contents('raw.txt'))))); |
охуеть в одну строку ) скобок может не хватать |
Стартер вроде хотел другого: Цитата: |
то есть он выдает результат с уже удаленными повторяющимися строками, а мне нужно знать какие строки были не уникальными (дублированными).
|
|
|
|
|
С нами с 18.08.04
Сообщения: 6376
Рейтинг: 4430
|
Добавлено: 11/06/08 в 07:53 |
Сорри видимо я не вчитался....
|
|
|
|