URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 4452
[ Назад ]

Исходное сообщение
"Как можно сортировать адресса e-mail с помощью PHP?"

Отправлено Andrey , 26-Окт-06 00:19 
Предо мной постало задание написать скрипт который бы мого сортировать адреса e-mail которые хранятся в текстовом файле, по их доменах... например: rambler.ru, mail.ru... а также найти одинаковые и оставить только один из них...

Содержание

Сообщения в этом обсуждении
"Как можно сортировать адресса e-mail с помощью PHP?"
Отправлено ВоВкА , 26-Окт-06 13:05 
>Предо мной постало задание написать скрипт который бы мого сортировать адреса e-mail
>которые хранятся в текстовом файле, по их доменах... например: rambler.ru, mail.ru...
>а также найти одинаковые и оставить только один из них...


#!/usr/bin/perl
open BLK,"<./emails.txt";
while(<BLK>){
  $str=$_;
  chomp($str);
    foreach ($str){($uname,$domain)=split(/\@/);
         $HASH{$domain}{$uname}=$uname;
}
}
for my $k1 ( sort keys %HASH ) {
for my $k2 ( sort keys %{$HASH{$k1}} ) {
print %HASH->{$k1}{$k2},"@","$k1\n";
}
}

Примерно так

Если что то непонятно и т.д пиши на мыло
удачи


"Как можно сортировать адресса e-mail с помощью PHP?"
Отправлено ВоВкА , 26-Окт-06 13:10 
да можно убрать вывод значения хеша
типа так будет

#!/usr/bin/perl
open BLK,"<./emails.txt";
while(<BLK>){
  $str=$_;
  chomp($str);
    foreach ($str){($uname,$domain)=split(/\@/);
         $HASH{$domain}{$uname}=$uname;
}
}
for my $k1 ( sort keys %HASH ) {
for my $k2 ( sort keys %{$HASH{$k1}} ) {
print $k2,"@","$k1\n";
}
}


"Как можно сортировать адресса e-mail с помощью PHP?"
Отправлено XAnder , 26-Окт-06 14:27 
>>Предо мной постало задание написать скрипт который бы мого сортировать адреса e-mail
>>которые хранятся в текстовом файле, по их доменах... например: rambler.ru, mail.ru...
>>а также найти одинаковые и оставить только один из них...
>
>#!/usr/bin/perl
> <...>
>
>Примерно так
>
>Если что то непонятно и т.д пиши на мыло
>удачи

ВоВкА, не обижайся, но что-то твой код не похож на PHP ;)

Можно, например, поступить так:

$eMails = array_unique(file("path/to/file"));

function cmp ($a, $b) {
   list($aUser, $aHost) = explode("@", $a);
   list($bUser, $bHost) = explode("@", $b);
   $hostCmp = strcmp($aHost, $bHost);
   if ($hostCmp != 0) return $hostCmp; else return strcmp($aUser, $bUser);
}
usort($eMails, "cmp");

Теперь $eMails содержит нужным образом отсортированный массив.

PS. Не тестировал :)


"Как можно сортировать адресса e-mail с помощью PHP?"
Отправлено Andrey , 26-Окт-06 14:44 
Спасибачки) Шас посмотрю, может и чтото выйдет...

"Как можно сортировать адресса e-mail с помощью PHP?"
Отправлено ВоВкА , 26-Окт-06 15:34 
да согласен это не PHP но переписать саму идею можно легко
а если это надо сделать 1-2 раза и у человека есть доступ к perl
то думаю и мой вариант прокатит


"Как можно сортировать адресса e-mail с помощью PHP?"
Отправлено primus , 26-Окт-06 20:19 
cat addresses.txt | sort | uniq
на выходе отсортированные "неодинаковые" адреса

"Как можно сортировать адресса e-mail с помощью PHP?"
Отправлено XAnder , 27-Окт-06 08:17 
>cat addresses.txt | sort | uniq
>на выходе отсортированные "неодинаковые" адреса

Красиво, но сортировать надо не по адресам а по доменам.


"Как можно сортировать адресса e-mail с помощью PHP?"
Отправлено primus , 27-Окт-06 22:03 
>>cat addresses.txt | sort | uniq
>>на выходе отсортированные "неодинаковые" адреса
>
>Красиво, но сортировать надо не по адресам а по доменам.
Зря я наверное упираюсь :) ведь не пхп же...
Но ведь там ( в пхп) пайпы есть?
cat addr.txt|awk -F@ '{printf("%s %s\n", $2, $1)}'|sort|uniq|awk '{printf("%s@%s\n", $2, $1)}'