ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 17.04.2009, 11:53
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

Тогда лучше пример такого файла ТОЧНЫЙ (или сказать, что точно так, как в вопросе, только хост заменен) + идут ли такие вот записи подряд или нет (одна под другой, или может быть случайное расположение)

PHP код:
<pre>
<?php
$str1 
"site.com/?id=1&page=end";
$str2 "site.com/?id=2&page=end";
$var1 similar_text($str1$str2, &$tmp);
echo 
"Совпадение в процентах: $tmp\n"// примерно 95%, 
//значит практически идентичны, для нас по условиям., идентичны

//Если отличие больше - значит у нас новая ссылка:
$str1 "site.com/?id=1&page=end";
$str2 "site.com/?pp=1&page=main&sort=1";
$var1 similar_text($str1$str2, &$tmp);
echo 
"Совпадение в процентах: $tmp\n"// примерно 70% 
//разница большая, новая уникальная ссылка (по условиям)
?>
</pre>
но в данном случае лучше всего подойдет функция Левенштейна, которая просто показывает, сколько символов надо заменить, чтобы из первой строки получить вторую, т.е. если возвращает 1 - строки АБСОЛЮТНО ИДЕНТИЧНЫ по условию задачи:

PHP код:
<?php
$str1 
"site.com/?id=1&page=end";
$str2 "site.com/?id=2&page=end";
$var levenshtein($str1,$str2);
echo(
$var); // вернет 1
?>
</pre>
если строки идут не подряд такого рода, а в разброс - то файл в массив и предварительная сортировка, потом обычное построчное чтение с помощью fgets() и сравнению по Левенштейну

т.е. по задаче конкретно примерно так выглядеть будет по идее:

PHP код:
<pre>
<pre>
<?php

$file 
'tema1.txt'// Файл с ссылками
$res 'tema10.txt'// Результирующий файл

// функция для сравнения по Левенштейну
function lev($str1,$str2) {
 
$a levenshtein($str1,$str2);
 if (
$a!=1) return true;
 return 
false
}

// Соритруем файл с сылками
$sort file($file);
sort($sort);
file_put_contents($file,$sort);
// Начинаем отбирать "уникальные" ссылки
$hand1 fopen($res,'w');
$hand fopen($file,'r');
while(!
feof($hand)) {
 
$buf1 trim(fgets($hand));
 
$buf2 trim(fgets($hand)); 
 if (
lev($buf1,$buf2)) fwrite($hand1,$buf1"\n" .$buf2 ."\r\n");
 else 
fwrite($hand1,$buf1 "\r\n");
}
fclose($hand);
fclose($hand1);
echo 
'Done';
?>
</pre>
Погонял щаз, на самом деле и этот вариант неправильный, т.к. будет работать только для ДВУХ подряд идущих ссылок)) А если их таких три и больше - не сработает. Поэтому вот ПРАВИЛЬНЫЙ вариант на любое кол-во таких ссылок:

PHP код:
<pre>
<?php

$file 
'tema1.txt'// Файл с ссылками
$res 'tema10.txt'// Результирующий файл

// функция для сравнения по Левенштейну
function lev($str1,$str2) {
 
$a levenshtein($str1,$str2);
 if (
$a==or $a==0) return false;
 return 
true
}

// А теперь сравниваем каждую строку 
//со всеми при помощи функции выше
function Ustr ($hand$str)
{
   
fseek($hand,0);
   while (!
feof ($hand)) {
      
$temp trim(fgets($hand));
      if (!
lev($str,$temp))
      return 
false;
   }
   return 
true;
}

// Сортируем файл с сылками
$sort file($file);
sort($sort);
file_put_contents($file,$sort);
// Начинаем отбирать "уникальные" ссылки
$hand1 fopen($res,'w+');
$hand fopen($file,'r');
while(!
feof($hand)) {
 
$buf trim(fgets($hand));
 if (
Ustr($hand1,$buf)) {
   
fseek ($hand10SEEK_END);
   
fwrite($hand1,$buf ."\r\n");
 }
}
fclose($hand);
fclose($hand1);
echo 
'Done';
?>
</pre>

Последний раз редактировалось Pashkela; 17.04.2009 в 13:28..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Delphi, .NET, Asm 5420 17.06.2010 13:33
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Форумы 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ