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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пишу функцию форматного вывода, помогите в некотор 
:(
    Опции темы
Guest
Дата 6.9.2005, 15:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











#!/usr/bin/perl -w

sub check_array {

@array=@{$_[0]};

if (ref($_[1]) eq "ARRAY") {

@to_find = @{$_[1]};

} elsif (ref($_[1]) eq "SCALAR") {

@to_find=("${$_[1]}");
}

my $ar_found = 1;

for ($i_f=0; ($i_f <= $#to_find) && $ar_found; $i_f++) {

my $el_found=0;


foreach $e_ar (@array) {

if ($to_find[$i_f] eq $e_ar) {

$el_found = 1;
}
}

$ar_found = $ar_found && $el_found;
}
return $ar_found;
}

sub output {

my ($fstr, %form_func) = @_;

my @args = split(/%(\w{2})/, $fstr);

my @funcs = keys %form_func;

foreach $arg (@args) {

if (check_array(\@funcs, \$arg)) {

print eval($form_func{"$arg"});

} else {

print $arg;
}
}

}


$host = 'test_host';
$port = 'test_port';

output('%ip:%pp',
'ip' => '$host',
'pp' => '$port'
);

итак сама функция называется output() , функция check_array() вспомогательная ,она возвращает булевые значения если массивы идентичны или какой то скаляр входит в массив (на самом деле передаются указатели на соответствующие структуры данных, как можно видеть из кода) ,

параметрами функции форматного вывода являются собственно по какому шаблону выводить , и соответствие ключей шаблона тому что реально подставляется в вывод
всё что несоответствует образцу в массиве @funcs просто выводится а не подставляется ничего

например если в вышепреведённом примере мы вызовем функцию с параметрами

output('%ip:%pp%test',
'ip' => '$host',
'pp' => '$port'
);

то она выведет test_host:test_port%test

то есть %test нет соответствия в параметрах которые мы передали, так же и происходит со всеми символами которые не попадают под образец

передо мной стоит следущая проблема:
в коде функции output();
я определяю эти самые ключи форматирования по следующему кримерию

my @args = split(/%(\w{2})/, $fstr);
тоесть символ процента и ещё 2 символа после него

я не могу придумать алгоритм как определять параметры которые различаются по длине названия
например %test %t
соответственно 4 символа и 1
IMHO только регулярным выражениям сдесь не обойтись...

была идея ограничивать ключи форматирования примерно так %test;
но это мне не нравится, если я хочу просто вывести точку с запятой...
вобщем много мусора получится
хочу чтоб всё по человечески было

помогите плиз ,заранее благоарен

p.s. код ещё сыроват ,порядрк наведу потом ,главное чтобы знать алгоритм решения проблемы
  Вверх
sharq
Дата 6.9.2005, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Не ограничивай разбор длиной, ограничивай - разделителями.
Например, введи ??: text??texttext??blabla.
И разбирай по разделителям, как тебе угодно, не надо зацикливаться на переменной длине.

smile

Всегда интересней общаться с тем кого знаешь, хотя бы имя. Зарегистрируйся! smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Guest
Дата 7.9.2005, 20:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











хех , была у меня такая идея

если честно не нравится мне так

потому как куччу "мусора" надо будет помимо вводить

>Всегда интересней общаться с тем кого знаешь, хотя бы имя. Зарегистрируйся!
если вам со мной хочется о чём то пообщаться ,просто скажите, я скажу вам свой ICQ UIN или адрес почты

  Вверх
korob2001
Дата 8.9.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



А почему не пользуешься format'ом?
М
 
Пожалуйста, пользуйтесь кнопкой "КОД", пропадает форматироваение кода.



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


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

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


 




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


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

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