HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

вопрос)
  #1  
Старый 06.12.2008, 01:05
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
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме:
3886281

Репутация: 929


По умолчанию

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

Ищи прогу SQLYog

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

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

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

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

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

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

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

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

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

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

  #5  
Старый 06.12.2008, 02:15
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Щту
Познающий
Регистрация: 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
Участник форума
Регистрация: 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..
 
Ответить с цитированием
Ответ



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



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


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




ANTICHAT ™ © 2001- Antichat Kft.