LogIn E-mail
설계이야기
jtree.pm
# 95 JMJS    08.11.29 20:26

#!/usr/bin/perl

#==============================================================================#
package JTREE;
#==============================================================================#
#------------------------------------------------------------------------------#
sub new {
#------------------------------------------------------------------------------#
        my ($class, @data) = @_;
        my $ref = {};
        bless $ref, $class;
        $ref->init(@data);
        return $ref;
}

#------------------------------------------------------------------------------#
sub init {
#------------------------------------------------------------------------------#
        my ($ref, @data) = @_;
        %$ref = ('jtree_name',        0,
                'jtree_level',        0,
                'jtree_loop',        0
        );
        foreach $adata (@data) {
                $ref->add($adata,'');
        }
}

#------------------------------------------------------------------------------#
sub add {
#------------------------------------------------------------------------------#
        my ($ref, @data) = @_;
        if(@data) { %$ref = (%$ref,@data);}
}

#------------------------------------------------------------------------------#
sub add_point {
#------------------------------------------------------------------------------#
        my ($ref, @points) = @_;
        foreach my $apoint (@points) {
                if(! $ref->{$apoint}) {
                        my $apointh = new JTREE;
                        $ref->add($apoint,$apointh);
                        $ref->{$apoint}->add("jtree_name",$apoint);
                }
        }
}

#------------------------------------------------------------------------------#
sub read_treeline {
#------------------------------------------------------------------------------#
        my ($ref,$point,@data) = @_;

        $ref->add_point($point,@data);

        foreach my $ason (@data) {
                $ref->{$point}->add($ason,$ref->{$ason});
        }
}

#------------------------------------------------------------------------------#
sub base_keys {
#------------------------------------------------------------------------------#
        my ($ref) = @_;
        my @olist=();
        foreach my $akey (keys %$ref) {
                if( ref($ref->{$akey}) eq "JTREE" ) {
                        push(@olist,$akey);
                }
        }
        @olist;
}

#------------------------------------------------------------------------------#
sub base_check {
#------------------------------------------------------------------------------#
        my ($ref,$hier) = @_;

        if(!($ref->{'treg1'} > $hier)) {
                $ref->{'treg1'} = $hier;
        }
        foreach my $akey ($ref->base_keys()) {
                $ref->{$akey}->base_check($hier+1);
        }
}

#------------------------------------------------------------------------------#
sub correct_check {
#------------------------------------------------------------------------------#
        my ($ref,$correct) = @_;

        if($correct == 1) {
                $ref->{'correct'} += 3;
                $ref->correct_base();
        }
        elsif($correct == -1) {
                $ref->{'correct'} = -1;
        }
}

#------------------------------------------------------------------------------#
sub correct_base {
#------------------------------------------------------------------------------#
        my ($ref) = @_;
        if($ref->{'correct'} == 0) {
                $ref->{'correct'} = 1;
        }
        foreach my $akey ($ref->base_keys()) {
                $ref->{$akey}->correct_base();
        }
}

#------------------------------------------------------------------------------#
sub false_base {
#------------------------------------------------------------------------------#
        my ($ref) = @_;
        foreach my $akey ($ref->base_keys()) {
                if(  (-1<$ref->{$akey}->{'correct'})
                   &&($ref->{$akey}->{'correct'}< 2)
                ) {
                        return($akey);
                }
        }
        return ();
}

#------------------------------------------------------------------------------#
sub cpoint_check {
#------------------------------------------------------------------------------#
        my ($ref,$hier) = @_;

        my @bkeys = $ref->base_keys();
        if(! @bkeys) { $ref->{'cpoint'} = -1;}
        foreach my $akey (@bkeys) {
                if($ref->{$akey}->{'cpoint'} != -1) {
                        $ref->{$akey}->{'cpoint'} += 1;
                }
        }
}

#------------------------------------------------------------------------------#
sub loop_check {
#------------------------------------------------------------------------------#
        my ($ref,$hier) = @_;

        my @bkeys = $ref->base_keys();
        if($ref->{'loop'} < $hier) { $ref->{'loop'} = $hier;}
        foreach my $akey ($ref->base_keys()) {
                $ref->{$akey}->loop_check($hier+1);
        }
}

#------------------------------------------------------------------------------#
sub level_calc {
#------------------------------------------------------------------------------#
        my ($ref,$level) = @_;

        if($ref->{'jtree_level'} > $level) {
                return;
        }
        $ref->{'jtree_level'} = $level;
        $level ++;

        foreach my $akey (keys %$ref) {
                if($akey !~ /^jtree/) {
                        print "$ref->{'jtree_name'}:\n";
                        print "        $ref->{$akey}->{'jtree_name'}:$level\n";
                        $ref->{$akey}->level_calc($level);
                }
        }
}

#------------------------------------------------------------------------------#
sub level_print {
#------------------------------------------------------------------------------#
        my ($ref,$rkey) = @_;

        foreach my $akey (keys %$ref) {
                if($akey !~ /^jtree/) {
                        print "$ref->{'jtree_name'}:$ref->{'jtree_level'}\n";
                }
        }
}

#------------------------------------------------------------------------------#
sub find_driver {
#------------------------------------------------------------------------------#
        my ($ref) = @_;

        my @data = ();
        foreach my $akey (sort keys %$ref) {
                if($akey =~ /^jtree_/) { next;}
                elsif(ref($ref->{$akey}) eq "JTREE") {
                        push(@data,$ref->{$akey}->find_driver());
                }
        }
        if(! @data) {
                @data = ($ref->{'jtree_name'});
        }

        return @data;
}

#------------------------------------------------------------------------------#
sub jprint {
#------------------------------------------------------------------------------#
        my ($ref,$tab,$hier) = @_;
        if(! $hier) { $hier = 1;}
        else { $hier ++;}
        my $ctab = "";
        for(my $i=1;$i<$hier;$i++) { $ctab .= $tab;}
        my $oline = "$ref = (\n";
        foreach my $key (sort keys %$ref) {
                $oline .= "$ctab$tab\{$key\}=>";
                my $alist = $ref->{$key};
                if( ref($alist) eq "JTREE" ) {
                        $oline .= $alist->jprint($tab,$hier);
                }
                else {
                        $oline .= "$alist(".ref($alist).")\n";
                }
        }
        $oline .= "$ctab)\n";
        $oline;
}

#------------------------------------------------------------------------------#
sub remove {
#------------------------------------------------------------------------------#
        my ($ref, @keys) = @_;
        my @data = %$ref;
        %$ref = ();
        for($i=0;$i<$#data;$i+=2) {
                my $flag = 0;
                foreach $akey (@keys) { if($data[$i] eq $akey) { $flag = 1;} }
                if(! $flag) { $ref->add($data[$i],$data[$i +1]);}
        }
}

#------------------------------------------------------------------------------#
sub DESTROY {
#------------------------------------------------------------------------------#
        #rint "Destroy the object at @_.\n";
}

#------------------------------------------------------------------------------#
1;
#------------------------------------------------------------------------------#

게시물: 109 건, 현재: 1 / 2 쪽
[1] [2]
번호 제       목 작성자 등록일 방문
116  last if break next redo jinsung 21.10.20 33
115  sort hash. by key, by value. hash jinsung 21.6.9 116
114  lunar.pl lunar.pm jinsung 21.3.9 156
113  package 변수 main 에서 사용시 local 선언 말 것 jinsung 20.12.10 204
112  foreach sort, sort uniq jinsung 21.1.31 260
111  diamond operator , jsort (square mix) jinsung 20.11.3 232
110  file2date.pl JMJS 20.1.12 289
109  UTF-8, EUC-KR JMJS 19.12.15 305
108  wget.pl LWP Simple get JMJS 19.9.17 398
100  jsame.pl JMJS 09.5.21 1861
99  jos.pl JMJS 08.11.29 1578
98  jmngr.pl - jmjspro manager JMJS 08.11.29 1599
97  vhdl.pm JMJS 08.11.29 1550
96  jreg.pl JMJS 08.11.29 1548
95  jtree.pm JMJS 08.11.29 1625
94  w2c.pl JMJS 08.11.29 1553
93  jdread.pl JMJS 08.11.29 1360
92  ffile.zip ffilediff.pl JMJS 09.4.24 1404
91  rgb2ycbcr.pl JMJS 10.5.12 1719
90  proview.pl JMJS 08.11.29 1751
89  smi_shift.pl JMJS 10.10.3 1391
88  srt2smi.pl srtshift.pl JMJS 18.7.14 1599
87  Perl CGI Input Test, getenv.cgi JMJS 18.11.21 1701
86  opendir, readdir, closedir JMJS 08.10.12 1528
85  tr a-z A-Z JMJS 08.10.3 1341
84  JARRAY->jfunc JMJS 08.10.2 1311
83  수치함수 - ... JMJS 09.5.7 1765
82  역행렬3x3 JMJS 09.5.7 1855
81  hex2int.pl JMJS 10.9.12 2595
80  stat - file status 보기 JMJS 07.12.16 1488
79  Perl Tip JMJS 09.7.20 2574
78  SMI file sync delay JMJS 07.7.18 1538
77  rmword.pl JMJS 07.6.18 1431
76  [Perl]package AP jinsung 07.2.28 1341
75  [Perl]read_dir.pl JMJS 07.2.22 1626
74  [Perl]jtab2char - tab문자를 특정 char로 바꿔주기 JMJS 07.2.22 1588
73  Perl 숫자 Sorting JMJS 11.5.17 1685
72  [CGI]GET and POST JMJS 06.11.20 3418
71  Perl Grammer JMJS 06.9.4 2943
70  표준 모듈 JMJS 06.8.10 1837
69  Getopt::Long example JMJS 06.8.10 1999
68  array of array $P[$j][$i] jinsung 20.12.20 1418
67  [HTML]테이블 배경에 그림넣기 JMJS 06.3.8 1521
66  l2w.pm - line to word JMJS 08.12.1 1479
65  make_random_chars JMJS 05.8.10 1354
64  mail 보내는 script JMJS 05.3.23 1302
63  실행파일을 실행시키고 표준에러 읽기 JMJS 09.2.25 1323
62  팝업창(공지창)띄우기 Jinsung 03.12.16 2405
61  print <<ENDLINE JMJS 03.12.5 1403
60  [HTML]Target JMJS 03.5.21 1437
59  [Perl]jutil.pm JMJS 03.5.3 1680
58  [Perl]jdiff.pl JMJS 02.6.6 1563
57  [Perl]cfilter.pm - commant filter JMJS 02.1.31 1615
56  [HTML]자동으로 다른 페이지 이동 JMJS 02.1.19 1463
55  Perl 설치하기 - ActiveWare JMJS 02.1.16 1476
54  opendir , readdir , closedir JMJS 02.1.4 1491
53  rand_diff JMJS 01.10.23 1396
52  vcd2v.pl JMJS 15.8.25 1450
51  file upload JMJS 01.3.16 1425
50  umask(070) <- chmod o-rwx 진성 01.3.16 1579
49  head2index 진성 01.3.15 1275
48  grep.pl JMJS 11.1.20 1403
47  chr(13) = \M 진성 01.3.15 1267
46  stty JMJS 01.3.12 1388
45  des.pl JMJS 01.3.8 1322
44  chr_plus.pl JMJS 01.3.8 1349
43  get passwd in unix JMJS 19.8.18 1196
42  unsort JMJS 19.9.10 1434
41  read from website web JMJS 19.5.15 1218
40  vec JMJS 01.3.8 1491
39  chomp $_ @_ say defined use 5.010 state grep any ... JMJS 18.10.27 1419
38  [Perl Tk] 도스창 없이, 펄 Tk 스크립트 실행하기; ... JMJS 17.9.30 1385
37  @bs = sort {$a <=> $b} @as; JMJS 17.7.12 1449
36  if ( -e -z -s -f -d -T -B -M ) JMJS 16.3.10 1530
35  mkmm.pl - make freemind JMJS 12.5.22 1498
34  perl -pi.orig -e "s/\bu_(\w+_t)\b/u$1/g" *.c JMJS 11.8.26 1469
33  .xls output csv 파일에 \n "가 있을때 JMJS 11.4.13 1339
32  jdcat.pl juncat.pl JMJS 11.2.24 1518
31  print chr(ord('a')); JMJS 01.3.8 1425
30  require "/user/home/jin1/jin1.pm"; JMJS 00.11.28 1359
29  for(my $i=0; $i < @abc; $i ++) {} JMJS 00.11.15 1465
28  remove blank $abc =~ s/[\s]+//g; JMJS 00.11.15 1397
27  array and for JMJS 00.11.14 1240
26  홈페이지 자동 이동 JMJS 00.10.28 1298
25  html에서 쓰이는 기호표시방법 JMJS 00.9.30 1239
24  배열의 범위 연산자 JMJS 00.9.20 1534
23  for(1..3) { print "$_";} JMJS 09.4.24 1229
22  package JMJS 00.9.18 1263
21  줄에서 한글자 고치기 JMJS 00.8.7 1359
20  hotkey function by getc JMJS 00.7.21 1466
19  read, sysread, syswrite JMJS 00.7.21 2259
18  crypt JMJS 00.7.13 1567
17  csv2gan.pl JMJS 11.4.4 1572
16  hexa JMJS 00.7.7 1375
15  file in out.pl JMJS 00.7.5 1589
14  ARGV JMJS 00.7.5 1425
13  jtime.pm - localtime, timelocal JMJS 09.4.9 1941
12  @INC JMJS 00.7.5 1786
11  $#myarray JMJS 00.7.5 1522
10  Hash of Array JMJS 00.7.5 1334
[1] [2]