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

вопрос)
  #1  
Старый 06.12.2008, 01:05
Аватар для j0ker13
j0ker13
Участник форума
Регистрация: 28.07.2008
Сообщений: 199
Провел на форуме:
861008

Репутация: 58
По умолчанию вопрос)

как с точки зрения скорости и правильности написать скрипт работа которого заключается вот в чем: есть файл, содержание допустим:
11 22 йц@ук 44
66 77 фы@ва 55
88 99 яч@см 00
44 55 йц@ук 22
нада убрать дубли строк в которых повторяются 3 столбик, т.е. где мыла.
как я придумал: сначала с помощью регулярки создаем массив всех мыл. потом удаляем дубли с помощью функции array_unique. потом цикл для каждой строки в файле, так же с помощью регулярки вытаскиваем мыло и еще запускаем цикл для каждого елемента в массиве мыл. и если они равны то сохраняем строчку и выходим из первого цикла. какие будут предложения?)
 
Ответить с цитированием

  #2  
Старый 06.12.2008, 01:12
Аватар для spider-intruder
spider-intruder
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме:
3886281

Репутация: 929


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

Поставить это в БД и не парится

Ищи прогу SQLYog

В ней удобный импорт из любого структурированного файла.
Потом кури distinct
И ВСе! :-)

Последний раз редактировалось spider-intruder; 06.12.2008 в 01:20..
 
Ответить с цитированием

  #3  
Старый 06.12.2008, 01:15
Аватар для Neoveneficus
Neoveneficus
Reservists Of Antichat - Level 6
Регистрация: 10.04.2008
Сообщений: 299
Провел на форуме:
1199829

Репутация: 405
Отправить сообщение для Neoveneficus с помощью ICQ
По умолчанию

Используй bash скрипты под Linux.
Мне кажется это самое простое.
Тебе нужны команды sort и uniq.
Первая сортирует, вторая удаляет дубли.
Так вот, во второй можно указать, какую часть строки исследовать. (Нужно почитать мануал grep и написать регулярку).
Пишется с манами 30 минут.
P.S. Если не разберешься - завтра могу помочь. Го ПМ. Сейчас мегаустал и сплю...
 
Ответить с цитированием

  #4  
Старый 06.12.2008, 01:23
Аватар для j0ker13
j0ker13
Участник форума
Регистрация: 28.07.2008
Сообщений: 199
Провел на форуме:
861008

Репутация: 58
По умолчанию

))чет в инете видел что array_unique сохраняет индексы. каким образом замутить?)

sql не совсем подходит) нужны прога для частого использования))

Последний раз редактировалось j0ker13; 06.12.2008 в 01:27..
 
Ответить с цитированием

  #5  
Старый 06.12.2008, 02:15
Аватар для m0nsieur
m0nsieur
Участник форума
Регистрация: 08.04.2008
Сообщений: 242
Провел на форуме:
2230263

Репутация: 229
По умолчанию

Раз тебе не понравился совет spider-intruder

Тогда можно несколько переделать твой алгоритм:
1. Как ты и сказал дернуть все мыла регуляркой и сохранить в 2 массива
2. 1 массив будет исходный, а по 2-ому пройтись через array_unique, затем вычислить между ними разницу, цель - найти все повторяющиеся значения.
3. Делаем проход с удалением повторяющихся значений по файлу - это будет оптимальней, полагая, что уникальных записей будет больше чем повторяющихся, следовательно проходов в цикле будет меньше.

P.S. Вариант с БД ловчее
 
Ответить с цитированием

  #6  
Старый 06.12.2008, 02:18
Аватар для FeoЩту
FeoЩту
Познающий
Регистрация: 13.11.2008
Сообщений: 31
Провел на форуме:
70426

Репутация: 14
По умолчанию

$file = file('file.txt');
$arr = array();
for($i=0;$i<count($file);$i++) {
$file[$i] = explode(' ', $file[$i]);
if(in_array($file[$i][2], $arr)) {
unset($file[$i]);
} else {
$arr[] = $file[$i][2];
}
}
 
Ответить с цитированием

  #7  
Старый 06.12.2008, 13:49
Аватар для j0ker13
j0ker13
Участник форума
Регистрация: 28.07.2008
Сообщений: 199
Провел на форуме:
861008

Репутация: 58
По умолчанию

2FeoЩту в твоем скрипте если я не ошибаюсь дубли вместе с оригиналами удалятся) а их нада оставить)
$arr Это походу массив мыл?)


вот что получилось))
<?php
$file_ar=file('c:\1.txt');
foreach($file_ar as $r){
preg_match("/([[:alnum:]]|[[unct:]]){1,}@(.*)\.[[:alnum:]]{2,3}/",$r,$o);
$email_ar[]= $o[0];
}
$email_ar=array_unique($email_ar);
$arr = array();
for($i=0;$i<count($file_ar);$i++) {
preg_match("/([[:alnum:]]|[[unct:]]){1,}@(.*)\.[[:alnum:]]{2,3}/",$file_ar[$i],$o);
$email1= $o[0];
if((in_array($email1,$email_ar)) and (!in_array($email1,$arr))) {
$arr[]=$email1;
echo $file_ar[$i].'<br>';
}}
?>

Последний раз редактировалось j0ker13; 06.12.2008 в 14:26..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Proxy FAQ foreva Чужие Статьи 12 04.01.2008 12:15
У меня такой вопрос got_666 E-Mail 3 28.01.2007 15:13
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Простой вопрос про сниффер errou PHP, PERL, MySQL, JavaScript 15 30.01.2006 20:54



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


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




ANTICHAT.XYZ