⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdma_corba_parser_1_pm.pl

📁 Perl 开发的电信CORBA接口v1的采集分析程序
💻 PL
字号:
#!/usr/local/bin/perl####################################################    parser one xml file to  txt file             ####################################################use strict;use FileHandle;use XML::Parser;use Data::Dumper;use Getopt::Long;my ( $xml_file , $dest_dir) ;$xml_file = $ARGV[0];$dest_dir = $ARGV[1];my  $usage =<<"EOF";Usage:  $0  <xml_file> <dest_dir>  EOFif (!($xml_file && $dest_dir )){    print $usage ;    exit -1;}my $qetxt_ref ;  # use method : $data_ref->{$table}->[0] = 'column0' ;my @element_stack ;my @measTypes;my @measResults ;my $measTypes_value = '';my $measResults_value = '';my ($elementType, $localDn, $measObjLdn, $beginTime ,$endTime ,$duration ,$cur_element) ;my $name_theme;my $line_char;my $data_ref ;  # use method : $data_ref->{$attribute_name} = $attribute_value ;my %hTableName = ( 'CMSC'=>'MscFunction',	           'CMSC60'=>'MscFunction',	                   'Msc'=>'MscFunction',                   'MSC'=>'MscFunction',                   'MscFunction'=>'MscFunction',                   'VlrFunction' => 'VlrFunction' ,                   'Vlr' => 'VlrFunction' ,                   'VLR' => 'VlrFunction' ,                   'HlrFunction' => 'HlrFunction' ,                   'Hlr' => 'HlrFunction' ,                   'HLR' => 'HlrFunction' ,                   'Ac' => 'AcFunction' ,                   'EirFunction' => 'EirFunction' ,                   'CircuitEndPointSubgroup' => 'CircuitEndPointSubgroup' ,                   'CircuitEndPointSubGroup' => 'CircuitEndPointSubgroup' ,                   'TKGP' => 'CircuitEndPointSubgroup' ,                   'ObservedDestination' => 'ObservedDestionation' ,                   'ObservDest' => 'ObservedDestionation' ,                   'SignallingLinkSetTP' => 'SignallingLinkSetTP' ,                   'signallingLinkSetTP' => 'SignallingLinkSetTP' ,                   'SignallingLinkTP' => 'signallingLinkTP' ,                   'signallingLinkTP' => 'signallingLinkTP' ,                   'BscFunction' => 'BscFunction' ,                   'Bsc' => 'BscFunction' ,                   'BtsFunction' => 'BtsFunction' ,                   'Bts' => 'BtsFunction' ,                   'Sector' => 'sector' ,                   'PcfFunction' => 'PcfFunction' ,                   'Pcf' => 'PcfFunction' ,                   'PdsnFunction' => 'PdsnFunction' ,                   'HaFunction' => 'HaFunction' ,                   'AaaFunction' => 'AaaFunction'                   ) ;my $FH_O ; # ;######  main program  ####### #read QETXT.INI $dest_dir =~ s/(.*)\/$/$1/;&read_qetxt( "$dest_dir/QETXT.INI" );#parser xmlmy $xml_hd = new XML::Parser(ErrorContext => 2);$xml_hd->setHandlers(	Start   => \&_start_handler,			Char    => \&_char_handler,			End     => \&_end_handler);$xml_hd->parsefile($xml_file);######  end of main  ########sub read_qetxt {    my $file_name = shift ;    my $FH = new FileHandle("$file_name") || die "can not open $file_name\n";        my ($cur_tab ,$line ,$idx) ;    while( $line = <$FH> ){                if( $line =~ /^\s*\[(\S+)\]\s*$/ ){            $cur_tab = $1;             $idx = 0 ;            next ;       	        }	       	       	if( $line =~ /^\s*FIELD\d+=(\w+),/ ){       	    $qetxt_ref->{$cur_tab}->[$idx] = uc $1 ;       	    $idx++;       	    next;       	}	    }    close($FH);}sub _start_handler{	my $pc = shift;	my $ELEMENT = shift;	my %ATTR = @_;	undef($line_char);                 $cur_element = $ELEMENT;        push @element_stack , $ELEMENT ;                #NE type => fileName		if( $ELEMENT eq 'fileSender' && $element_stack[@element_stack -2 ] eq 'fileHeader'){	    $elementType = $ATTR{'elementType'};		    $localDn = $ATTR{'localDn'};		    #open file 	    my $file_name = "$dest_dir/$hTableName{$elementType}.txt";            $FH_O = new FileHandle(">>$file_name") || die "can not open $file_name\n";                #beginTime of file     			}elsif( $ELEMENT eq 'measCollec' && $element_stack[@element_stack -2 ] eq 'fileHeader' ){	    $beginTime = $ATTR{'beginTime'} ;	        #endTime of file	}elsif( $ELEMENT eq 'measCollec' && $element_stack[@element_stack -2 ] eq 'fileFooter' ){	    $endTime = $ATTR{'$endTime'} ;	        #managedElement localDn	}elsif( $ELEMENT eq 'managedElement' ){	    $localDn = $ATTR{'localDn'};	        #duration , endTime	}elsif( $ELEMENT eq 'granPeriod' ){				    $duration = $ATTR{'duration'};		    $endTime = $ATTR{'endTime'};	               #measObjLdn	}elsif( $ELEMENT eq 'measValue' ){	    $measObjLdn = $ATTR{'measObjLdn'};		    $name_theme=$measObjLdn;	    my $name_dn = $hTableName{$elementType} ;	    if (($name_dn=~ /MscFunction/) or ($name_dn=~ /VlrFunction/)){#print "=======$name_dn=========\n";		$name_theme=~ /^(\S+),\w*Function=\w+$/;		$name_theme=$1;		#$data_ref->{'theme'}  = $name_theme ;#print "$name_theme\n";	    }        #measTypes	}elsif( $ELEMENT eq 'measTypes' ){	    $measTypes_value = '';	                    #measResults	}elsif( $ELEMENT eq 'measResults' ){	    $measResults_value = '';		    undef $data_ref ;        }        }sub _end_handler{	my $pc = shift;	my $ELEMENT = shift;	my $model = shift;	undef($line_char);        #print "end: $ELEMENT\n";        pop @element_stack ;        $cur_element = $element_stack[@element_stack -1] ;        	if( $ELEMENT eq 'measTypes' ){	    	     $measTypes_value = trim(uc $measTypes_value);             @measTypes = split(/[\s\n]+/,$measTypes_value );	}elsif( $ELEMENT eq 'measResults' ){	   	    $measResults_value = trim($measResults_value);            @measResults = split(/[\s\n]+/,$measResults_value );            for( my $i = 0 ; $i<@measTypes ; $i++){                 my $col_name = $measTypes[$i];                 $col_name =~ s/^\w+\.//;		 if ($measResults[$i] =~ /NIL/) {			$measResults[$i] ='';		 }            	 $data_ref->{$col_name} = $measResults[$i];            	             }	            $beginTime =~ s/T/ /g;            $beginTime =~ s/\+\S+$//;            $beginTime =~ s/\-\S+$//;            $endTime =~ s/T/ /g;            $endTime =~ s/\+\S+$//;            $endTime =~ s/\-\S+$//;            if( $duration =~ /(\d+)/ ){            	$duration = $1 ;            }	             $data_ref->{uc 'beginTime'} = $beginTime ;            $data_ref->{uc 'endTime'}   = $endTime ;            $data_ref->{uc 'duration'}  = $duration ;	    $data_ref->{uc 'theme'}  = $name_theme ;                  #if( $localDn =~ /,\s*$/ ){                #$data_ref->{'dn'}  = $localDn.$measObjLdn ;            #}else{                #    $data_ref->{'dn'}  = $measObjLdn ;            #}                     $data_ref->{uc 'dn'} = $measObjLdn;            my $line ;            my $tab_name = $hTableName{$elementType} ;            my $arr_tab = $qetxt_ref->{$tab_name} ;            for( my $i =0 ; $i < @$arr_tab ; $i++){             	my $column = $qetxt_ref->{$tab_name}->[$i] ;            	if( defined($line) ){            	    $line .= "\t".$data_ref->{$column};            	}else{                    $line = $data_ref->{$column};            	}            }		    print $FH_O "$line\n" ;		}		#close file after all element has ended .	if( @element_stack == 0 ){	    	close( $FH_O );	}	}sub _char_handler{	my $pc = shift;	my $CHAR = shift;	$line_char .=$CHAR;	$CHAR = $line_char;        #print "CHAR:$CHAR\n";        if( $cur_element eq 'measTypes' ){                $measTypes_value =  $CHAR ;  	}elsif( $cur_element eq 'measResults' ){                    $measResults_value = $CHAR ;         }    		}sub trim {    my $str = shift;    $str =~ s/^[\s\t\n]+//;    $str =~ s/[\s\t\n]+$//;    return $str;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -