Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 02:16 28.06.24 
Компютри и Интернет
   >> Perl
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 1 | 2 | 3 | >> (покажи всички)
Тема Match - може ли да се оптимизиранови  
Автор bira_more (бира)
Публикувано20.07.07 23:35



Имам променлива $keep (една буква)
Имам променлива $buf
Целта е да разбера дали $buf се състои само от $keep
Кода по долу - върши работа.
Опитах няколко неща с match ама нещо не мога да получа каквото искам.

 

@all=split(//,$buf);
$L=@all;
for($j=0;$j<$L;$j++){
$p=$all[$j];
if($p!=$keep){
$Same=0;
last;
}
}

Например
if($buf =~m/$keep{length($buf)}/)
Не работи - поне не така както бих искал аз.

Bеer? Mоre?



Тема Re: Match - може ли да се оптимизиранови [re: bira_more]  
Авторerrata (Нерегистриран)
Публикувано24.07.07 07:21



To i az sum edin pishman programist, no sled kato vsichki specove sa otishli na more ...
Ta znachi, ako $keep e bukva (t.e. string s dulzhina 1), kakvo ti prechi da izpolzvash operatora eq (za sravniavane na strings) ili zadulzhitelno triabva da e s match?

if ($buf eq $keep) {...}



Тема Re: Match - може ли да се оптимизиранови [re: bira_more]  
Авторperlmonk (Нерегистриран)
Публикувано24.07.07 12:31



нещо от сорта би следвало да е поне толкова ефективно колкото и "eq".


use strict;

my @ar1 = qw(a a a);
my @ar2 = qw(a a b);
my $buf = 'a';


print "Array 'ar1' contains only '$buf' chars\n" if _eqls(\@ar1, $buf);
print "Array 'ar2' contains only '$buf' chars\n" if _eqls(\@ar2, $buf);


sub _eqls {
my $arr = shift;
my $buf = shift;
my $h = {};

for my $el (@$arr) {
$h->{$el}++;
last if keys %$h > 1;
}

return 'true' if $h->{$arr->[0]} == scalar @$arr;
return undef;
}





Тема Re: Match - може ли да се оптимизиранови [re: bira_more]  
Авторperlmonk (Нерегистриран)
Публикувано24.07.07 12:43



или защо не компилиран регулярен израз?


my $buf = 'a';
my $keep = 'aaa';
my $regex = qr{^\Q$buf\E+$};

$keep =~ /$regex/;




Тема Проблема енови [re: errata]  
Автор bira_more (бира)
Публикувано24.07.07 16:33



$keep="8";
$buf="8889";
$buf1="8888888";
няма поне според мен нещо което директно да казва
$keep == $buf1;
$keep != $buf;

Bеer? Mоre?




Тема Yesнови [re: perlmonk]  
Автор bira_more (бира)
Публикувано24.07.07 16:37



Мерси много - точно това търсех.
Сега ще огледам какво прави с надеждата и да разбера повече за Perl / regexp


Някой ден ако се видим - имаш ена бира :)

Bеer? Mоre?



Тема В същностнови [re: perlmonk]  
Автор bira_more (бира)
Публикувано24.07.07 17:05



if($keep =~ /^$buf+$/)
е достатъчно.

Много мерси за идеята - така де принтнах $regex да видя какво става :)

Bеer? Mоre?




Тема Re: В същностнови [re: bira_more]  
Авторnovobranec (Нерегистриран)
Публикувано24.07.07 21:01



Ако ти трябва за това което си мисля (мачване на префикси) ще береш ядове, този regex не е достатъчен.



Тема Re: В същностнови [re: novobranec]  
Автор bira_more (бира)
Публикувано25.07.07 01:18



Ще го обясня на C че ми е по лесно.
Имам
char S[x];
char C;
ако всички букви на S са равни на C Same=1
else Same = 0;
Пример
S="88888888888";
C='8';
Same = 1;

S="888898888888";
C='8';
Same = 0;

Bеer? Mоre?




Тема Re: В същностнови [re: novobranec]  
Авторperlmonk (Нерегистриран)
Публикувано25.07.07 10:52



novobranec, нищо лошо няма да се разчита на толкова добре оптимизирана машина като тази за регулярните изрази в Perl. Пример с 'eq' и regex:


use strict;
use Benchmark qw(:all);

$main::string = 'aaaaaaaaaa';
$main::buffer = 'a';
@main::array = split '', $main::string;

#my $results =
timethese(10_000_000, {
'equal' => '$main::buffer eq $_ or last for @main::array',
'regex' => '$main::string =~ /^\Q$main::buffer\E+$/o',
});

#cmpthese( $results );

__END__

output:

Benchmark: timing 10000000 iterations of equal, regex...
equal: 31 wallclock secs (27.16 usr + 0.01 sys = 27.17 CPU) @ 368053.00/s (n=10000000)
regex: 7 wallclock secs ( 7.23 usr + 0.00 sys = 7.23 CPU) @ 1383125.86/s (n=10000000)






Страници по тази тема: 1 | 2 | 3 | >> (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.