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;
#------------------------------------------------------------------------------#

게시물: 101 건, 현재: 1 / 2 쪽
번호 제       목 작성자 등록일 방문
108  wget.pl LWP Simple get JMJS 19.9.17 11
100  jsame.pl JMJS 09.5.21 1478
99  jos.pl JMJS 08.11.29 1217
98  jmngr.pl - jmjspro manager JMJS 08.11.29 1284
97  vhdl.pm JMJS 08.11.29 1257
96  jreg.pl JMJS 08.11.29 1268
95  jtree.pm JMJS 08.11.29 1314
94  w2c.pl JMJS 08.11.29 1273
93  jdread.pl JMJS 08.11.29 1091
92  ffile.zip ffilediff.pl JMJS 09.4.24 1140
91  rgb2ycbcr.pl JMJS 10.5.12 1370
90  proview.pl JMJS 08.11.29 1444
89  smi_shift.pl JMJS 10.10.3 1119
88  srt2smi.pl srtshift.pl JMJS 18.7.14 1284
87  Perl CGI Input Test, getenv.cgi JMJS 18.11.21 935
86  opendir, readdir, closedir JMJS 08.10.12 1219
85  tr a-z A-Z JMJS 08.10.3 1033
84  JARRAY->jfunc JMJS 08.10.2 1037
83  수치함수 - ... JMJS 09.5.7 1432
82  역행렬3x3 JMJS 09.5.7 1559
81  hex2int.pl JMJS 10.9.12 2248
80  stat - file status 보기 JMJS 07.12.16 1125
79  Perl Tip JMJS 09.7.20 2190
78  SMI file sync delay JMJS 07.7.18 1233
77  rmword.pl JMJS 07.6.18 1145
76  [Perl]package AP jinsung 07.2.28 1063
75  [Perl]read_dir.pl JMJS 07.2.22 1316
74  [Perl]jtab2char - tab문자를 특정 char로 바꿔주기 JMJS 07.2.22 1245
73  Perl 숫자 Sorting JMJS 11.5.17 1391
72  [CGI]GET and POST JMJS 06.11.20 2894
71  Perl Grammer JMJS 06.9.4 2463
70  표준 모듈 JMJS 06.8.10 1545
69  Getopt::Long example JMJS 06.8.10 1717
68  array of array JMJS 06.4.22 1145
67  [HTML]테이블 배경에 그림넣기 JMJS 06.3.8 1231
66  l2w.pm - line to word JMJS 08.12.1 1205
65  make_random_chars JMJS 05.8.10 1081
64  mail 보내는 script JMJS 05.3.23 1037
63  실행파일을 실행시키고 표준에러 읽기 JMJS 09.2.25 1048
62  팝업창(공지창)띄우기 Jinsung 03.12.16 2085
61  print <<ENDLINE JMJS 03.12.5 1128
60  [HTML]Target JMJS 03.5.21 1158
59  [Perl]jutil.pm JMJS 03.5.3 1353
58  [Perl]jdiff.pl JMJS 02.6.6 1292
57  [Perl]cfilter.pm - commant filter JMJS 02.1.31 1336
56  [HTML]자동으로 다른 페이지 이동 JMJS 02.1.19 1189
55  Perl 설치하기 - ActiveWare JMJS 02.1.16 1176
54  opendir , readdir , closedir JMJS 02.1.4 1218
53  rand_diff JMJS 01.10.23 1125
52  vcd2v.pl JMJS 15.8.25 1201
51  file upload JMJS 01.3.16 1123
50  umask(070) <- chmod o-rwx 진성 01.3.16 1301
49  head2index 진성 01.3.15 1008
48  grep.pl JMJS 11.1.20 1113
47  chr(13) = \M 진성 01.3.15 1002
46  stty JMJS 01.3.12 1116
45  des.pl JMJS 01.3.8 1039
44  chr_plus.pl JMJS 01.3.8 1063
43  get passwd in unix JMJS 19.8.18 947
42  unsort JMJS 19.9.10 1172
41  read from website web JMJS 19.5.15 966
40  vec JMJS 01.3.8 1230
39  chomp $_ @_ say defined use 5.010 state grep any ... JMJS 18.10.27 1123
38  [Perl Tk] 도스창 없이, 펄 Tk 스크립트 실행하기; ... JMJS 17.9.30 1046
37  @bs = sort {$a <=> $b} @as; JMJS 17.7.12 1174
36  if ( -e -z -s -f -d -T -B -M ) JMJS 16.3.10 1234
35  mkmm.pl - make freemind JMJS 12.5.22 1190
34  perl -pi.orig -e "s/\bu_(\w+_t)\b/u$1/g" *.c JMJS 11.8.26 1208
33  .xls output csv 파일에 \n "가 있을때 JMJS 11.4.13 1074
32  jdcat.pl juncat.pl JMJS 11.2.24 1213
31  print chr(ord('a')); JMJS 01.3.8 1139
30  require "/user/home/jin1/jin1.pm"; JMJS 00.11.28 1073
29  for(my $i=0; $i < @abc; $i ++) {} JMJS 00.11.15 1175
28  remove blank $abc =~ s/[\s]+//g; JMJS 00.11.15 1121
27  array and for JMJS 00.11.14 977
26  홈페이지 자동 이동 JMJS 00.10.28 1017
25  html에서 쓰이는 기호표시방법 JMJS 00.9.30 962
24  배열의 범위 연산자 JMJS 00.9.20 1235
23  for(1..3) { print "$_";} JMJS 09.4.24 975
22  package JMJS 00.9.18 1002
21  줄에서 한글자 고치기 JMJS 00.8.7 1078
20  hotkey function by getc JMJS 00.7.21 1173
19  read, sysread, syswrite JMJS 00.7.21 1962
18  crypt JMJS 00.7.13 1231
17  csv2gan.pl JMJS 11.4.4 1295
16  hexa JMJS 00.7.7 1123
15  file in out.pl JMJS 00.7.5 1296
14  ARGV JMJS 00.7.5 1147
13  jtime.pm - localtime, timelocal JMJS 09.4.9 1559
12  @INC JMJS 00.7.5 1493
11  $#myarray JMJS 00.7.5 1242
10  Hash of Array JMJS 00.7.5 1057
9  package JARRAY JHASH JMJS 00.7.4 1261
8  foreach, while each, dos2unix.pl, next last JMJS 09.4.24 1237
7  치환 전이 JMJS 00.7.4 1072
6  file lock JMJS 00.7.4 1164
5  gettime JMJS 00.7.4 1149
4  [Perl]jcdread.pl JMJS 00.7.4 1250
3  [Perl]jdread.pl JMJS 00.7.4 1115
2  Hash Example JMJS 00.6.27 1135
[1] [2]