Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регесп с условием в цикле 
V
    Опции темы
DiverD
Дата 20.9.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 14.9.2005
Где: Белорусь

Репутация: 1
Всего: 2



Есть массив с урлами вида: 

@old_array
Код

http://forum.vingrad.ru/index.php?act=Mail&CODE=00&MID=26457
http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=23454
http://forum.vingrad.ru/index.php?act=Main&LOL=00&MID=21434
http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=22345
http://forum.vingrad.ru/index.php?act=SC&c=1
http://forum.vingrad.ru/index.php?act=SC&c=2
http://forum.vingrad.ru/index.php?act=НН&c=3

...
...
Как сдесь видно они почти одинаковы за исключением того что в их переменных разные значения.
мне нужна добавлять из етога массив в другой скажем в цикле foreach те элементы которые неодинаковы именами переменных а не их значений.
Из приведенного примера результат должен быть таким:

@new_array
Код

http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=23454
http://forum.vingrad.ru/index.php?act=SC&c=2
http://forum.vingrad.ru/index.php?act=НН&c=3
http://forum.vingrad.ru/index.php?act=Main&LOL=00&MID=21434


Помогите пожалуйсто.

Это сообщение отредактировал(а) diverd - 20.9.2006, 11:07
--------------------
[ FreeBSD & pERL p0WER eVERY dAY ]
PM MAIL   Вверх
nitr
Дата 20.9.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



лучше уточнить...
почему к примеру выбираем второй из двух
Код

http://forum.vingrad.ru/index.php?act=Mail&CODE=00&MID=26457
http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=23454



--------------------
PM   Вверх
nitr
Дата 20.9.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



вот попробуй переделать... или объясни понятней что хочешь smile
Код

#!perl -w
############
#
# уникальные по именам параметров, и попадают значения последних урл
#
#############
use strict;

my @urls = qw(
http://forum.vingrad.ru/index.php?act=Main&CODE=00&MID=26457
http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=23454
http://forum.vingrad.ru/index.php?act=Main&LOL=00&MID=21434
http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=22345
http://forum.vingrad.ru/index.php?act=SC&c=1
http://forum.vingrad.ru/index.php?act=SC&c=2
http://forum.vingrad.ru/index.php?act=HH&c=3);

my $hash;
foreach (@urls) {
    my $str = $_;
    1 while $str =~ s/(\?|\&)(\S+?\=)([^\b&]+)/$1$2/g;    
    $hash->{$str} = $_;
}
foreach (sort keys %$hash) {
    print $hash->{$_}."\n";
}



--------------------
PM   Вверх
DiverD
Дата 20.9.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 14.9.2005
Где: Белорусь

Репутация: 1
Всего: 2



Щас на работе перла пока нету не могу проверить твой код.
Мы 2й из 2х не выбираем, щас поясню с начала:

Вот список урлов представим что они в массиве:
http://forum.vingrad.ru/index.php?act=Main&CODE=00&MID=26457 # 1й урл будет уникален
http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=23454 # будет уникален
http://forum.vingrad.ru/index.php?act=Main&LOL=00&MID=21434 # будет уникален
http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=22345 # такой уже есть - это 2й урл
http://forum.vingrad.ru/index.php?act=SC&c=1 # уникален
http://forum.vingrad.ru/index.php?act=SC&c=2 # уже есть - это придыдущий
http://forum.vingrad.ru/index.php?act=HH&c=3 # уже есть - см выше

Из етога массива дожны быть выбраны те урлы которые уникальны по своим именнам переменных:
http://site.com/index.php?[parm_name]={value}&[new_parm_name]={values}
                                          ^^^^^^^^                  ^^^^^^^^^^^^

Это сообщение отредактировал(а) diverd - 20.9.2006, 13:58
--------------------
[ FreeBSD & pERL p0WER eVERY dAY ]
PM MAIL   Вверх
nitr
Дата 20.9.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



так и работает мой код ;)
только измени чтоб не

Цитата(nitr @  20.9.2006,  13:46 Найти цитируемый пост)
############## уникальные по именам параметров, и попадают значения последних урл##############


только вот всё же ты несовсем пояснил... код можно доработать ско-ка угодно раз ;)


Код

http://forum.vingrad.ru/index.php?act=Main&CODE=00&MID=26457 # 1й урл будет уникален
http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=23454 # будет уникален

они не уникальны smile между собой !!!!! (по параметрам ;) )
смотри убираем нафиг значения параметров ;) и получаем
Код

http://forum.vingrad.ru/index.php?act=...&CODE=...&MID=...
http://forum.vingrad.ru/index.php?act=...&CODE=...&MID=...

так что мой код работает, но если тебе результат всё же другой, то сам перефразируй и ОБДУМАЙ что ты хошь ;)

Это сообщение отредактировал(а) nitr - 20.9.2006, 14:30


--------------------
PM   Вверх
DiverD
Дата 20.9.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 14.9.2005
Где: Белорусь

Репутация: 1
Всего: 2



Большое спасибо нитр все клэба.
--------------------
[ FreeBSD & pERL p0WER eVERY dAY ]
PM MAIL   Вверх
amg
Дата 21.9.2006, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Здесь уже стало традицией (почти) любое решение сводить к однострочнику. smile  Вот:
Код

@urls = qw(
http://forum.vingrad.ru/index.php?act=Main&CODE=00&MID=26457
http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=23454
http://forum.vingrad.ru/index.php?act=Main&LOL=00&MID=21434
http://forum.vingrad.ru/index.php?act=File&CODE=00&MID=22345
http://forum.vingrad.ru/index.php?act=SC&c=1
http://forum.vingrad.ru/index.php?act=SC&c=2
http://forum.vingrad.ru/index.php?act=HH&c=3);

@new_array = grep {! $hash{"@{[/(&|^)(.*?)=/g]}"}++} @urls;

print "$_\n" foreach (@new_array);

PM MAIL   Вверх
nitr
Дата 21.9.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



amg, эту традицию надо во что-то записать... как поговорил со знающими людьми это называется ТимТоуди или по-простому перлгольф... имхо надо сделать для этого что-то ;)


--------------------
PM   Вверх
amg
Дата 21.9.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



ТимТоуди - это от "There Is More Than One Way To Do It (TIMTOWDI)", кажется, не переврал - имеется много больше одного способов сделать что-нибудь. А еще в Perl'е есть целая субкультура - one-liners - однострочники, когда достаточно нетривиальную программу запихивают в одну небольшую строку. И то, и другое лично мне очень нравится, хотя хорошо ли это на самом деле - вопрос сугубо философский.

Кстати, у меня собрана довольно полная коллекция Perl one-liners (несортированная, правда). Например:
Код

# Удаление повторяющихся строк из файла
perl -i -ne '$s{$_}++ || print' file

Такие однострочники весьма помогают мне в Windows, благодаря им Perl заменяет многие из юниксовых core utils. С удовольствием поделюсь, если кому интересно. Эту коллекцию еще бы до ума довести...

PM MAIL   Вверх
nitr
Дата 21.9.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



модера попроси отдельный подраздел сделать smile 
закрытый наверное... лучше...
и туда кинь свою коллекцию... будем добавлять или обновлять как-нить.. тож продумать надо, чтобы не засорять... 



--------------------
PM   Вверх
amg
Дата 21.9.2006, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Тогда для начала я просто ссылку дам: ссылка. А там видно будет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.