Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

06.12.2008, 01:05
|
|
Участник форума
Регистрация: 28.07.2008
Сообщений: 199
Провел на форуме: 861008
Репутация:
58
|
|
вопрос)
как с точки зрения скорости и правильности написать скрипт работа которого заключается вот в чем: есть файл, содержание допустим:
11 22 йц@ук 44
66 77 фы@ва 55
88 99 яч@см 00
44 55 йц@ук 22
нада убрать дубли строк в которых повторяются 3 столбик, т.е. где мыла.
как я придумал: сначала с помощью регулярки создаем массив всех мыл. потом удаляем дубли с помощью функции array_unique. потом цикл для каждой строки в файле, так же с помощью регулярки вытаскиваем мыло и еще запускаем цикл для каждого елемента в массиве мыл. и если они равны то сохраняем строчку и выходим из первого цикла. какие будут предложения?)
|
|
|

06.12.2008, 01:12
|
|
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме: 3886281
Репутация:
929
|
|
Поставить это в БД и не парится
Ищи прогу SQLYog
В ней удобный импорт из любого структурированного файла.
Потом кури distinct
И ВСе! :-)
Последний раз редактировалось spider-intruder; 06.12.2008 в 01:20..
|
|
|

06.12.2008, 01:15
|
|
Reservists Of Antichat - Level 6
Регистрация: 10.04.2008
Сообщений: 299
Провел на форуме: 1199829
Репутация:
405
|
|
Используй bash скрипты под Linux.
Мне кажется это самое простое.
Тебе нужны команды sort и uniq.
Первая сортирует, вторая удаляет дубли.
Так вот, во второй можно указать, какую часть строки исследовать. (Нужно почитать мануал grep и написать регулярку).
Пишется с манами 30 минут.
P.S. Если не разберешься - завтра могу помочь. Го ПМ. Сейчас мегаустал и сплю...
|
|
|

06.12.2008, 01:23
|
|
Участник форума
Регистрация: 28.07.2008
Сообщений: 199
Провел на форуме: 861008
Репутация:
58
|
|
))чет в инете видел что array_unique сохраняет индексы. каким образом замутить?)
sql не совсем подходит) нужны прога для частого использования))
Последний раз редактировалось j0ker13; 06.12.2008 в 01:27..
|
|
|

06.12.2008, 02:15
|
|
Участник форума
Регистрация: 08.04.2008
Сообщений: 242
Провел на форуме: 2230263
Репутация:
229
|
|
Раз тебе не понравился совет spider-intruder
Тогда можно несколько переделать твой алгоритм:
1. Как ты и сказал дернуть все мыла регуляркой и сохранить в 2 массива
2. 1 массив будет исходный, а по 2-ому пройтись через array_unique, затем вычислить между ними разницу, цель - найти все повторяющиеся значения.
3. Делаем проход с удалением повторяющихся значений по файлу - это будет оптимальней, полагая, что уникальных записей будет больше чем повторяющихся, следовательно проходов в цикле будет меньше.
P.S. Вариант с БД ловчее 
|
|
|

06.12.2008, 02:18
|
|
Познающий
Регистрация: 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];
}
}
|
|
|

06.12.2008, 13:49
|
|
Участник форума
Регистрация: 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..
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|