ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

Репутация: 214


По умолчанию

спасибо!
 
Ответить с цитированием

  #1232  
Старый 23.10.2009, 08:46
.::ICH::.
Новичок
Регистрация: 01.08.2009
Сообщений: 8
Провел на форуме:
38871

Репутация: 5
По умолчанию

можно плиз конечный вариант^^ я в перле не шарю =( я запутался xD
 
Ответить с цитированием

  #1233  
Старый 23.10.2009, 15:29
budden
Участник форума
Регистрация: 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 нужных параметров в нужной мне форме в цикл.

Кол-во строк в каждом блоке постоянно и заранее известно.

Поможете?
 
Ответить с цитированием

  #1234  
Старый 23.10.2009, 16:44
krypt3r
Познавший АНТИЧАТ
Регистрация: 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;
}
 
Ответить с цитированием

  #1235  
Старый 23.10.2009, 17:51
budden
Участник форума
Регистрация: 26.07.2008
Сообщений: 267
Провел на форуме:
1343031

Репутация: 184
По умолчанию

krypt3r
Большущее спасибо!

Один момент - как можно изменить так, чтобы при отсутствии чего-либо из последней строки - все-равно выводилось? Т.е. если вместо
i hate morons8
будет последней строкой
8
или
i hate morons

Сейчас если что-либо из них отсутствует, то вся строка не печатается.

Или это потребует все поменять?

Последний раз редактировалось budden; 23.10.2009 в 17:53..
 
Ответить с цитированием

  #1236  
Старый 23.10.2009, 19:10
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме:
3660186

Репутация: 905


По умолчанию

Чуток только регулярку подправить
Код:
... \s*(.*?)(\d*)\n|\Z/gm
 
Ответить с цитированием

  #1237  
Старый 23.10.2009, 19:43
budden
Участник форума
Регистрация: 26.07.2008
Сообщений: 267
Провел на форуме:
1343031

Репутация: 184
По умолчанию

krypt3r
Спасибо!
 
Ответить с цитированием

  #1238  
Старый 25.10.2009, 16:25
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

вопрос, есть такой код:
Код:
#!/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..
 
Ответить с цитированием

  #1239  
Старый 25.10.2009, 17:41
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме:
3660186

Репутация: 905


По умолчанию

Код:
$res = $trl[$_]->join;
 
Ответить с цитированием

  #1240  
Старый 25.10.2009, 17:49
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

спасибо, задумка понятна, но там join в цикле, при попыке ретурна обрываются потоки, как корректно прилепить этот вариант к коду выше?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[php] Новичкам: задаем вопросы _Great_ PHP, PERL, MySQL, JavaScript 16396 17.06.2010 21:19
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Delphi, .NET, Asm 5420 17.06.2010 13:33
Вопросы по Ipb 2.0 Voodoo_People Форумы 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ