Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Sergey Prozhogin                     2:5030/324.324 30 Apr 2001  21:59:08
 To : All
 Subject : проблема с хешами
 -------------------------------------------------------------------------------- 
 
 
 
 проблема непростая, думаю многим интересна будет.
 парсю я xml. навесил колбеки на Start & Char и в старт-колбеке получаю пару
 значений ключn, ключn+1, а в текст - ключn+1, значение.
 имея такого рода данные я хочу составить хеш.
 
 $hash->{key1}->{key2}->{key3}->value;
 
 и двже написал небольшую прожку, которая это делает. и в принципе правильно, но 
 с одной закавыкой. куда-то хеш время от времени девается!
 
 поглядите на эту прожку, это первое приближение. может что путное и посоветуете.
 орлам: пробовал я к примеру EasyTree, но она меня не устраивает тем, что данные 
 из нее все равно надо перетягивать в ручную в свою структуру, лучше уж сразу
 напрямую и анализировать качество данных.
 
 благодарен  за любые дельные советы.
 спасибо
 
 собственно вот сама прожка:
 === Cut ===
 use strict;
 use Data::Dumper;
 
 my $hash;
 
 $hash->{level11}->{level21} = {} if( !add_key( $hash, 'level11', 'level21'
 
 ));
 print Dumper( $hash )."\n--------------------------------------\n";
 
 $hash->{level21}->{level31} = {} if( !add_key( $hash, 'level21', 'level31'
 
 ));
 print Dumper( $hash )."\n-------------------------------------\n";
 
 $hash->{level11}->{level22} = {} if( !add_key( $hash, 'level11', 'level22'
 
 ));
 print Dumper( $hash )."\n--------------------------------------\n";
 
 $hash->{level22}->{level32} = {} if( !add_key( $hash, 'level22',
 
 'level32'));
 print Dumper( $hash )."\n-------------------------------------\n";
 
 #add_key( $hash, 'level22', 'level33' );
 #print Dumper( $hash )."\n-------------------------------------\n";
 
 #add_key( $hash, 'level33', 'level41' );
 #print Dumper( $hash )."\n-------------------------------------\n";
 
 #add_key( $hash, 'level33', 'level42' );
 #print Dumper( $hash )."\n-------------------------------------\n";
 sub add_key( $;$;$ )
 {
     my ($hash, $key, $new_key ) = @_;
 
     if( exists( $hash->{$key} )){
         $hash->{$key}->{$new_key} = {};
         print '+1';
         return 1;
     } else {
         while( my ($k, undef) = each %$hash ){
             my $rc = 0;
             $rc = add_key( $hash->{$k}, $key, $new_key ) if( ref( $hash->{$k})
 eq "HASH");
             if( $rc == 1 ){
                 print '-1';
                 return 1;
             }
         }
     }
 
     print '0';
     return 0;
 }
 === Cut ===
 
 -= Какая у Мэри Поппинс
     \\/br \\cc pro
 --- kulatsky podpevala 3.00b2
  * Origin: Renton WA 98058 (2:5030/324.324)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 проблема с хешами   Sergey Prozhogin   30 Apr 2001 21:59:08 
Архивное /ru.perl/45563aede1f2.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional