powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / массивы в perl
10 сообщений из 10, страница 1 из 1
массивы в perl
    #38512258
noTpyJI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Есть файлик примерно со следующим содержимым
содержимое файликаавтор

euromechanics@mail.ru
eeee
@tor.sa
mbr@m-b-r.ru
primus
-ru@mail.ru
info
@tv-burg.ru


нужно содержимое файлика запихать в массив, и отделить host от имени
то есть от euromechanics@mail.ru должно остаться mail.ru, поскольку в файлике mail.ru встречается более одного раза
то повторяющийся host в массив не нужно записывать.

то есть из списка

авторeuromechanics@mail.ru
eeee
@tor.sa
mbr@m-b-r.ru
primus
-ru@mail.ru
info
@tv-burg.ru

должно остаться

авторmail.ru
tor.sa
m-b-r.ru
tv-burg.ru

пока у меня получилось отделить host от имени, как убрать дубли и записать их
в массив не получается.

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
open(FILE, 'c_email.txt'); 

my @temp = <FILE>;

close FILE;

for($i = 0; $i < $#temp; $i++) {
  print substr($temp[$i], index($temp[$i],'@')+1);
}



Я не программист просьба не ругать сильно
...
Рейтинг: 0 / 0
массивы в perl
    #38512325
S_Andrey_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
map {/(.*)@(.*)/;$hash{$2}=$1} @temp;

print "$_\n" foreach keys %hash;
...
Рейтинг: 0 / 0
массивы в perl
    #38512436
noTpyJI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_Andrey_A,

Прошу прощения не могли бы вы пояснить строчку
Код: python
1.
$hash{$2} = $1
...
Рейтинг: 0 / 0
массивы в perl
    #38512694
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noTpyJI,

/(.*)@(/.*)/ - Для строчки qwe@rty.ru: $1 будет qwe, $2 - rty.ru. Фактически - любая группа символов, заключенных в скобки () в регулярке будет последовательно записана в $1 - $9.
...
Рейтинг: 0 / 0
массивы в perl
    #38512762
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
Часть до символа @ нафиг в данной задаче не нужна, так что ее можно не захватывать. Вариант попроще без map и со split
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
open my $F, '<', '31.txt' or die "open() error: $!";
my %hash;
while (<$F>)
{
    chomp;
    my $tmp = (split /\@/)[1];
    $hash{$tmp} = 1;                                                                                                                 
}                                                                                                                                    
close $F;                                                                                                                            
print for keys %hash;
...
Рейтинг: 0 / 0
массивы в perl
    #38512786
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mhxЧасть до символа @ нафиг в данной задаче не нужна, так что ее можно не захватывать. Вариант попроще без map и со split
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
open my $F, '<', '31.txt' or die "open() error: $!";
my %hash;
while (<$F>)
{
    chomp;
    my $tmp = (split /\@/)[1];
    $hash{$tmp} = 1;                                                                                                                 
}                                                                                                                                    
close $F;                                                                                                                            
print for keys %hash;



Да! Без явного open,без явного split, без явного while, но с команд. строкой
Код: perl
1.
perl -aF/@/ -nE ' $hash{ $F[1] }=1; END { print for keys %hash} ' 31.txt
...
Рейтинг: 0 / 0
массивы в perl
    #38512791
S_Andrey_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mhxЧасть до символа @ нафиг в данной задаче не нужна, так что ее можно не захватывать. Вариант попроще без map и со split

Да все верно, скобки в регэкспах захватывают значения и помещают в переменные $1,$2..$9.
Использование map или while это как говориться на вкус и цвет _))

Тоже самое со split :

Код: php
1.
2.
3.
4.
5.
6.
map {
     $hash{(split/@/)[1]}++
    }
@temp;

print "$_\n" foreach keys %hash;
...
Рейтинг: 0 / 0
массивы в perl
    #38512886
noTpyJI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Warstone,

спасибо за пояснение, как я понял в %hash в key хранится host то есть @rty а value qwe
Остался вопрос в какой момент происходит отсечение дублей?!

Всем спасибо за ваши ответы!
...
Рейтинг: 0 / 0
массивы в perl
    #38512912
S_Andrey_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noTpyJIWarstone,

спасибо за пояснение, как я понял в %hash в key хранится host то есть @rty а value qwe
Остался вопрос в какой момент происходит отсечение дублей?!

Всем спасибо за ваши ответы!

Ни какого отсечения не происходит.

В двух словах: Используется хэш - структура данных с именованными элементами. Те это набор пар Ключ=>Значение.
В примерах создается элемент хэша с ключем Host и ему что нибудь присваивается(например первая часть мыла), при проходе цикла через дубль, происходит переприсваивание значения уже ранее созданному элементу с соответствующим ключём.
В конце выводим все ключи хэша...

В общем курим про перловые хэши._)
...
Рейтинг: 0 / 0
массивы в perl
    #38513271
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noTpyJIОстался вопрос в какой момент происходит отсечение дублей?!


Раскрытие темы: 17 мгновений отсечения дублей
Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
use Time::HiRes;
my @lines
    = qw '
        euromechanics@mail.ru
        eeee@tor.sa
        mbr@m-b-r.ru
        primus-ru@mail.ru
        info@tv-burg.ru
        ' x 17;


printf "Начало отсчёта: %f\n", time();

my %hash;
for ( @lines ) {
    m{ @ (.+) }xms;
    if ( exists $hash{$1} ) {
       printf "Момент отсечения %d-го дубля $1: %f\n", $hash{$1}, time;
    }                                                                                             
    $hash{$1}++;   
}                                                                                                                                    
                                                                                                                            
print join "\n", sort keys %hash;
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / массивы в perl
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]