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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> парсер хэша, хэш сформирован их xml 
V
    Опции темы
Agares
  Дата 18.7.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть вот такой хэш, сформирован из xml:
Код

$VAR1 = [
          {
            'ID' => 269,
            'FeatureGroup' => {
                              'ID' => '0',
                              'Name' => {
                                        'ID' => '5073',
                                        'Value' => 'Technical details',
                                        'langid' => '1'
                                      }
                            },
            'No' => '1'
          },
          {
            'ID' => '35',
            'FeatureGroup' => {
                              'ID' => '1',
                              'Name' => {
                                        'ID' => '4859',
                                        'Value' => 'Processor',
                                        'langid' => '1'
                                      }
                            },
            'No' => '100'
          },
          {
            'ID' => '107',
            'FeatureGroup' => {
                              'ID' => '2',
                              'Name' => {
                                        'ID' => '4861',
                                        'Value' => 'Disk drive',
                                        'langid' => '1'
                                      }
                            },
            'No' => '90'
          }
]


Как его пропарсить? Битый час эксперементирую... 


--------------------
Мой ноут: Impression First 657
ОС: Gentoo Linux
PM MAIL WWW Skype GTalk   Вверх
arto
Дата 18.7.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



а зачем хеш парсить?
PM MAIL ICQ   Вверх
tolkien
Дата 18.7.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Рекурсия 

Код


%hash = (1,2,3);
parsing_hash(\%hash);

#$hash - ref hash
sub parsing_hash
{
  my ($hash) = @_;
  
  while (my ($key, $value) = each(%{$hash}))
  {
    print $key, ' = ';
    
    if (ref($value) eq 'Hash')
    {
      parsing_hash($value);
    }
    elsif (ref($value) eq 'Array')
    {
      print @{$value}, "\n";
    }
    elsif (ref ($value) eq 'Scalar')
    {
      print ${$value}, "\n";
    }
    else
    {
      print $value, "\n";
    }
  }
}

PM MAIL   Вверх
AlexanderI
Дата 18.7.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Почитай ещё вот эту тему.
Она мне очень помогла:

http://forum.vingrad.ru/forum/topic-204974.html
--------------------
Магазин детских игрушек  | Авто ВАЗ
PM MAIL   Вверх
Agares
  Дата 18.7.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



tolkien, мне вот такое пишет:
Код

Can't use string ("ARRAY(0x89805a0)") as a HASH ref while "strict refs" in use at /home/yury/gcc/lib/icecat_server3.pm line 171.


171строка это my ($hash) = @_;

Добавлено через 2 минуты и 44 секунды
Немного подправил свой код....
выдает функция слудующее:
Код

ID = 

И все :( целый день мучаю...


--------------------
Мой ноут: Impression First 657
ОС: Gentoo Linux
PM MAIL WWW Skype GTalk   Вверх
Agares
  Дата 18.7.2008, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



сделал так:

Код

foreach $val ( @{$CategoryFeatureGroup} )
                {
                        $count++;
                }

                print STDOUT $count;

                while ($i < $count)
                {
                        print STDOUT    'ID -> ' . $CategoryFeatureGroup->[$i]->{'ID'} . '<br />' .
                                        'FeatureGroup ID -> ' . $CategoryFeatureGroup->[$i]->{'FeatureGroup'}->{'ID'} . '<br />' .
                                        'FeatureGroup Name ID -> ' . $CategoryFeatureGroup->[$i]->{'FeatureGroup'}->{'Name'}->{'ID'} . '<br />' .
                                        'FeatureGroup Name Value -> ' . $CategoryFeatureGroup->[$i]->{'FeatureGroup'}->{'Name'}->{'Value'} . '<br />' .
                                        'FeatureGroup Name langid -> ' . $CategoryFeatureGroup->[$i]->{'FeatureGroup'}->{'Name'}->{'langid'} . '<br />' .
                                        'No -> ' . $CategoryFeatureGroup->[$i]->{'No'} . '<br /><br />';
                                        ;
                        $i++;
                }


После 10 шага вылетает ошибка: Can't use string ("") as a HASH ref while "strict refs" in use at /home/yury/gcc/lib/icecat_server3.pm line 119.

Что это? как ее решить?


--------------------
Мой ноут: Impression First 657
ОС: Gentoo Linux
PM MAIL WWW Skype GTalk   Вверх
tolkien
Дата 19.7.2008, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У вас $VAR1 это не хеш, а массив. Вот работающий код.

Код

$VAR1 = { 1 =>
          {
            'ID' => 269,
            'FeatureGroup' => {
                              'ID' => '0',
                              'Name' => {
                                        'ID' => '5073',
                                        'Value' => 'Technical details',
                                        'langid' => '1'
                                      }
                            },
            'No' => '1'
          },
          2 =>
          {
            'ID' => '35',
            'FeatureGroup' => {
                              'ID' => '1',
                              'Name' => {
                                        'ID' => '4859',
                                        'Value' => 'Processor',
                                        'langid' => '1'
                                      }
                            },
            'No' => '100'
          },
          3 =>
          {
            'ID' => '107',
            'FeatureGroup' => {
                              'ID' => '2',
                              'Name' => {
                                        'ID' => '4861',
                                        'Value' => 'Disk drive',
                                        'langid' => '1'
                                      }
                            },
            'No' => '90'
          }
};

parsing_hash($VAR1);

##########subs
sub parsing_hash
{
  my ($hash) = @_;
  
  if (ref($hash) ne 'HASH')
  {
    print "invalid param type \$hash(", ref($hash), ')', " NEED REF HASH!!!";
  }
  else
  {
    while (my ($key, $value) = each(%{$hash}))
    {
      print $key, ' = ';
      
      if (ref($value) eq 'HASH')
      {
        print "\n";
        parsing_hash($value);
      }
      elsif (ref($value) eq 'ARRAY')
      {
        print @{$value}, "\n";
      }
      elsif (ref ($value) eq 'SCALAR')
      {
        print ${$value}, "\n";
      }
      else
      {
        print $value, "\n";
      }
    }
  }
}

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


Опытный
**


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

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



Спасибо smile


--------------------
Мой ноут: Impression First 657
ОС: Gentoo Linux
PM MAIL WWW Skype GTalk   Вверх
nitr
Дата 22.7.2008, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Agares, спасибо человеку приятно, но приятнее, если его "отплюсуете" ;)

Добавлено через 5 секунд
 smile 


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


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

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


 




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


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

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