Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

22.10.2009, 20:07
|
|
Постоянный
Регистрация: 15.06.2007
Сообщений: 527
Провел на форуме: 1734541
Репутация:
214
|
|
спасибо!
|
|
|

23.10.2009, 08:46
|
|
Новичок
Регистрация: 01.08.2009
Сообщений: 8
Провел на форуме: 38871
Репутация:
5
|
|
можно плиз конечный вариант^^ я в перле не шарю =( я запутался xD
|
|
|

23.10.2009, 15:29
|
|
Участник форума
Регистрация: 26.07.2008
Сообщений: 267
Провел на форуме: 1343031
Репутация:
184
|
|
Очень прошу помочь в написании парсера файла след. вида:
Код:
Array
(
[parameter] => testing
[key] => Test1
[Referrer] => HIDDEN
[Time] => TRUE
)
i like bitches0
Array
(
[parameter] => neva
[key] => megakey
[Referrer] => mozilla
[Time] => 2007-09
)
i hate morons8
Как видно в файле много блоков (в примере привел 2, но их больше), которые состоят из блока Array () и затем одной строки.
Нужен скрипт, который бы присваивал $parameter значение из блока [parameter], $key - из блока [key] и так далее.
Т.е. для 1го блока:
$parameter = 'testing'
$key = 'Test1'
$Referrer = 'HIDDEN'
$Time = 'TRUE'
И последняя строка содержит в себе еще 2 параметра:
1) $first-parameter - вся строка, кроме последней одной цифры, т.е. $first-parameter = 'i like bitches'
2) $second-parameter - последняя цифра из полсденей строки, т.е. 0 для первого блока, 8 - для второго
Вот и хочется, чтобы шел парсинг файла в цикле, а я уже сам добавлю - print нужных параметров в нужной мне форме в цикл.
Кол-во строк в каждом блоке постоянно и заранее известно.
Поможете?
|
|
|

23.10.2009, 16:44
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
Код:
#!/usr/bin/perl
use strict;
use warnings;
$\ = "\n";
my $str = <<STR;
Array
(
[parameter] => testing
[key] => Test1
[Referrer] => HIDDEN
[Time] => TRUE
)
i like bitches0
Array
(
[parameter] => neva
[key] => megakey
[Referrer] => mozilla
[Time] => 2007-09
)
i hate morons8
STR
while ($str =~ /Array\s*\(\s*\[parameter\]\s*=>\s*(.+)\n\s*\[key\]\s*=>\s*(.+)\n\s*\[Referrer\]\s*=>\s*(.+)\n\s*\[Time\]\s*=>\s*(.+)\n\s*\)\s*(.+?)(\d+)\n|\Z/gm) {
my ($parameter, $key, $Referrer, $Time, $first_par, $second_par) = ($1, $2, $3, $4, $5, $6);
last unless defined $key;
print join ', ' => $parameter, $key, $Referrer, $Time, $first_par, $second_par;
}
|
|
|

23.10.2009, 17:51
|
|
Участник форума
Регистрация: 26.07.2008
Сообщений: 267
Провел на форуме: 1343031
Репутация:
184
|
|
krypt3r
Большущее спасибо!
Один момент - как можно изменить так, чтобы при отсутствии чего-либо из последней строки - все-равно выводилось? Т.е. если вместо
i hate morons8
будет последней строкой
8
или
i hate morons
Сейчас если что-либо из них отсутствует, то вся строка не печатается.
Или это потребует все поменять?
Последний раз редактировалось budden; 23.10.2009 в 17:53..
|
|
|

23.10.2009, 19:10
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
Чуток только регулярку подправить
Код:
... \s*(.*?)(\d*)\n|\Z/gm
|
|
|

23.10.2009, 19:43
|
|
Участник форума
Регистрация: 26.07.2008
Сообщений: 267
Провел на форуме: 1343031
Репутация:
184
|
|
krypt3r
Спасибо!
|
|
|

25.10.2009, 16:25
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
вопрос, есть такой код:
Код:
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
$a = gets();
print $a . "\n";
sub gets {
$thr = 10;
$n = 0;
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
$trl[$_]->join;
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
print $ii . "\n";
}
return $ii;
}
}
как получить значение $ii ?
Т.е. как бы примеров с многопоточными функции в инете полно, но везде производится просто ВЫВОД НА МОНИТОР, как именно ВЕРНУТЬ полученное значение, чтобы использовать его дальше? Спасибо
Последний раз редактировалось Pashkela; 25.10.2009 в 16:28..
|
|
|

25.10.2009, 17:41
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
Код:
$res = $trl[$_]->join;
|
|
|

25.10.2009, 17:49
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
спасибо, задумка понятна, но там join в цикле, при попыке ретурна обрываются потоки, как корректно прилепить этот вариант к коду выше?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|