fjzcau
作者fjzcau·2014-06-07 23:13
系统运维工程师·金融

pqss_data_load.pl 加载数据到 sql server 2000

字数 161334阅读 3723评论 1赞 1
1)加载配置文件 pqss_data_load.ini
#采集系统配置档案
[DBINIT]
DBCONN_POWER = DSN = zz_power;  UID=sa; PWD =sys;  database  =  pqsspower;  #本地连接
DBCONN_BASE = DSN = zz_power;  UID=sa; PWD =sys;  database  =  pqssbase;

#远程连接
# DBCONN = driver={sql server}; server=172.26.35.42; DSN=wodeperl; UID=sa; PWD=wode; database=pqsspower;

#这里,路径内不能有空格且不区分大小写,如E:wodedata loadlog,不符合。
OutputPath = E:wodedataloaddata           #源数据目录
UnprocessedPath = E:wodedataloadunprocess #未处理的数据目录
LogPath = E:wodedataloadlog               #日志目录
BackUpPath = E:wodedataloadbackup         #备份目录
[END_DBINIT]

[LOAD_CONFIG]
load_config_flag  = 0                    # 0:全加载目录OutputPath下所有的文件,转换规则是[DEFAULT_CONVERT];
                                         # 1:按配置加载,转换规则有几组:
                                         #  load_meter参数的第一个设备(如,4111001)的转换规则对应[CONFIG_CONVERT_1],
                                         #  第二个设备的转换规则对应[CONFIG_CONVERT_2],依此类推。

load_meter =    4111001,4111003          # 加载物理电表ID
meter_convert_inx = 1,      2            # 按convert_1转换,load_meter相对应的电表
load_begin_date = 20101209               # 加载开始日期,20110908
load_end_date = 20101210                 # 加载结束日期,20110908
[END_LOAD_CONFIG]

[DEFAULT_CONVERT]
#数据库索引, 偏移系数a[减], 比例系数b[乘], 比例系数c[除], y = (x-a) × b / c
21 = 2047,150,2047    #va
23 = 2047,150,2047    #vb
25 = 2047,150,2047    #vc     
11 = 2047,10,2047     #Ia
13 = 2047,10,2047     #Ib  
15 = 2047,10,2047     #Ic
84 = 2047,3000,2047   #P
94 = 2047,3000,2047   #Q
99 = 2047,3000,2047   #S
104 = 2047,1,1000     #PF
111 = -6142.5,30,4095 #Freq
41 = 2047,300,2047    #Uab
43 = 2047,300,2047    #Ubc
45 = 2047,300,2047    #Uca
124 = 0,1,1           #PW+     
125 = 0,1,1           #PW-     
134 = 0,1,1           #QW+
135 = 0,1,1           #QW-
136 = 0,1,1           #SW
81 = 2047,3000,2047   #Pa 
82 = 2047,3000,2047   #Pb
83 = 2047,3000,2047   #Pc
91 = 2047,3000,2047   #Qa
92 = 2047,3000,2047   #Qb
93 = 2047,3000,2047   #Qc
96 = 2047,3000,2047   #Sa
97 = 2047,3000,2047   #Sb
98 = 2047,3000,2047   #Sc
101 = 2047,1,1000     #PFa
102 = 2047,1,1000     #PFb
103 = 2047,1,1000     #PFc
12 = 0,1,10           #AngIa
14 = 0,1,10           #AngIb
16 = 0,1,10           #AngIc
22 = 0,1,10           #AngVab
24 = 0,1,10           #AngVbc
26 = 0,1,10           #AngVca
211 = 0,1,100         #THDVa
212 = 0,1,100         #THDVb
213 = 0,1,100         #THDVc
201 = 0,1,100         #THDIa
202 = 0,1,100         #THDb
203 = 0,1,100         #THDIc
555 = 12,1,9999
[END_DEFAULT_CONVERT]

[CONFIG_CONVERT_1]
#数据库索引, 偏移系数a[减], 比例系数b[乘], 比例系数c[除], y = (x-a) × b / c
21 = 2047,150,2047    #va
23 = 2047,150,2047    #vb
25 = 2047,150,2047    #vc     
11 = 2047,10,2047     #Ia
13 = 2047,10,2047     #Ib  
15 = 2047,10,2047     #Ic
84 = 2047,3000,2047   #P
94 = 2047,3000,2047   #Q
99 = 2047,3000,2047   #S
104 = 2047,1,1000     #PF
111 = -6142.5,30,4095 #Freq
41 = 2047,300,2047    #Uab
43 = 2047,300,2047    #Ubc
45 = 2047,300,2047    #Uca
124 = 0,1,1           #PW+     
125 = 0,1,1           #PW-     
134 = 0,1,1           #QW+
135 = 0,1,1           #QW-
136 = 0,1,1           #SW
81 = 2047,3000,2047   #Pa 
82 = 2047,3000,2047   #Pb
83 = 2047,3000,2047   #Pc
91 = 2047,3000,2047   #Qa
92 = 2047,3000,2047   #Qb
93 = 2047,3000,2047   #Qc
96 = 2047,3000,2047   #Sa
97 = 2047,3000,2047   #Sb
98 = 2047,3000,2047   #Sc
101 = 2047,1,1000     #PFa
102 = 2047,1,1000     #PFb
103 = 2047,1,1000     #PFc
12 = 0,1,10           #AngIa
14 = 0,1,10           #AngIb
16 = 0,1,10           #AngIc
22 = 0,1,10           #AngVab
24 = 0,1,10           #AngVbc
26 = 0,1,10           #AngVca
211 = 0,1,100         #THDVa
212 = 0,1,100         #THDVb
213 = 0,1,100         #THDVc
201 = 0,1,100         #THDIa
202 = 0,1,100         #THDb
203 = 0,1,100         #THDIc
555 = 12,1,9999
[END_CONFIG_CONVERT_1]

[CONFIG_CONVERT_2]
#数据库索引, 偏移系数a[减], 比例系数b[乘], 比例系数c[除], y = (x-a) × b / c
21 = 2047,150,2047    #va
23 = 2047,150,2047    #vb
25 = 2047,150,2047    #vc     
11 = 2047,10,2047     #Ia
13 = 2047,10,2047     #Ib  
15 = 2047,10,2047     #Ic
84 = 2047,3000,2047   #P
94 = 2047,3000,2047   #Q
99 = 2047,3000,2047   #S
104 = 2047,1,1000     #PF
111 = -6142.5,30,4095 #Freq
41 = 2047,300,2047    #Uab
43 = 2047,300,2047    #Ubc
45 = 2047,300,2047    #Uca
124 = 0,1,1           #PW+     
125 = 0,1,1           #PW-     
134 = 0,1,1           #QW+
135 = 0,1,1           #QW-
136 = 0,1,1           #SW
81 = 2047,3000,2047   #Pa 
82 = 2047,3000,2047   #Pb
83 = 2047,3000,2047   #Pc
91 = 2047,3000,2047   #Qa
92 = 2047,3000,2047   #Qb
93 = 2047,3000,2047   #Qc
96 = 2047,3000,2047   #Sa
97 = 2047,3000,2047   #Sb
98 = 2047,3000,2047   #Sc
101 = 2047,1,1000     #PFa
102 = 2047,1,1000     #PFb
103 = 2047,1,1000     #PFc
12 = 0,1,10           #AngIa
14 = 0,1,10           #AngIb
16 = 0,1,10           #AngIc
22 = 0,1,10           #AngVab
24 = 0,1,10           #AngVbc
26 = 0,1,10           #AngVca
211 = 0,1,100         #THDVa
212 = 0,1,100         #THDVb
213 = 0,1,100         #THDVc
201 = 0,1,100         #THDIa
202 = 0,1,100         #THDb
203 = 0,1,100         #THDIc
555 = 12,1,9999
[END_CONFIG_CONVERT_1]

=====================================================================================
2) pqss_data_load.pl 加载脚本
use strict;                        
use DBI;                           
use File::Basename;                
use File::stat;          
use File::Copy;
use File::glob;          
use Time::localtime;  
use Cwd;
use Math::Complex;
use Win32::ODBC;


our $pqss_data_load_init = "e:\wode\dataload\pqss_data_load.ini";
our @LOAD_INIT;                 # 配置文件的内容
our $DSN_POWER;                 # 连接数据库
our $DSN_BASE;                  # 连接数据库
our $DBNAME = "pqsspower";
our $DBNAME_BASE = "pqssbase";
our $DBH;
our $ret;

our $tm = get_time("yyyymmdd");
our $LOADLOG = "pqss_load_$tm.log";       # 日志
our $DATAPATH;                  # 源数据目录
our $UNDOPATH;                  # 未处理文件目录
our $BACKUPPATH;                # 备份目录

our $load_config_flag;          # 0:默认全加载目录OutputPath下所有的文件;1:按配置加载
our $data_rectime;              # 文件名中的日期 20101218235039 年月日时分秒
our @load_data_files;           # 获取加载的文件名,不带路径
our %data_hash;                 # 散列,保存了各列及其值
our %data_hash2;                # 临时
# %data_hash = (
#     21 => 6000.12,
#     23 => 6100.50,
# );
#----------------配置加载----------------
our @load_meter;                # 加载的物理电表。配置加载,load_meter是简单的一维数组。
our @meter_convert_inx;             # 配置转换规则选项
our @load_date;                 # 加载文件的日期范围,[$load_beg_date,$load_end_date]
our $load_beg_date;
our $load_end_date;
our %convert_array_hash;        # 以数组的散列保存需要转换的列
# %convert_array_hash = (
#     21 => [2047,150,2047],
#     23 => [2045,130,2045],    
# );

our $progtm;

sub main {  
    #----------main start-------
    $progtm = get_time("YYYY-MM-DD,HH:MI:SS");
    
    # 1.获取配置参数
    get_param();
    
    wtlog("Program $0 start $progtm.n");
    
    # 2.--------DB Connection--------
    $DBH = wode_db_conn($$DSN_POWER);
    
    # 3.入库主程序
    load_main($DBH);
    
    # 调试信息        
    debug_param_print();
    
    # 4.---------DB Close-----------
    $ret = wode_db_close($DBH);
    wtlog("Close database $ret!(1:ok; 0:fail)n");
    
    #----------main end-------
    $progtm = get_time("YYYY-MM-DD,HH:MI:SS");
    wtlog("Program $0 end $progtm.n");
}

sub load_main{
    my ($dbh) = @_;
    my ($datafile,$fe);
    
    # 获取电表
    get_meters();             
    
    if(1 == $load_config_flag)  # 按配置加载物理电表
    {
        get_load_date();        # 获取加载文件的日期区间 @load_date
        get_meter_convert_inx();
    }
    elsif(0 == $load_config_flag)
    {
    }
    else
    {
        wtlog("--> sub load_main --> error load_cong $load_config_flagn");
    }
    
    #获取加载的文件名,不带路径 @load_data_files
    get_load_data_files();
    
    foreach $fe (@load_data_files)  # 循环加载每个数据文件
    {
        $datafile = $DATAPATH."\$fe"; #带绝对路径的文件名
        
        fetch_load_data($datafile);    #获取数据文件内容 %data_hash  
                
        do_convert($fe);  #转换由fetch_load_data得到的数据文件内容,%data_hash

        wtlog("n--->sub load_main,file: $datafile <---nn");    
            
        pqss_imp_data($dbh,$fe);  # 将当前文件数据内容入库
        
        move_load_file($datafile); #当前文件移至备份目录
    }
}

sub move_load_file{   #当前文件移至备份目录
    my ($datafile) = @_;  #带路径
    my $datafile_date = substr($data_rectime,0,8);
    my $backpath = $BACKUPPATH."\$datafile_date";
    
    mkdir("$backpath") unless(-d $backpath);#加载完的文件移动到$BACKUPPATH路径下,并按文件日期分开
    if(0 == system("move /Y $datafile $backpath"))
    {
        wtlog("move $datafile to $backpath ok!n");
    }
    else
    {
        wtlog("move $datafile to $backpath error--> $!n");
        die("move $datafile to $backpath error--> $!n");
    }
}

sub pqss_imp_data{    # 入库
    my ($dbh,$datafile) = @_;
    
    pqss_imp_vhisdata($dbh,$datafile); # 1 将当前文件电压数据内容入库
    
    pqss_imp_fvhisdata($dbh,$datafile); # 2 将当前文件基波电压数据内容入库
    
    pqss_imp_psvhisdata($dbh,$datafile); # 3 将当前文件相序电压数据内容入库
    
    pqss_imp_ihisdata($dbh,$datafile); # 4 将当前文件电流数据内容入库
    
    pqss_imp_fihisdata($dbh,$datafile); # 5 将当前文件基波电流数据内容入库
    
    pqss_imp_psihisdata($dbh,$datafile); # 6 将当前文件相序电流数据内容入库
    
    pqss_imp_unbhisdata($dbh,$datafile); # 7 将当前文件三相不平衡数据内容入库
    
    pqss_imp_freqhisdata($dbh,$datafile); # 8 将当前文件频率数据内容入库
    
    pqss_imp_phisdata($dbh,$datafile);  # 9 将当前文件有功功率数据内容入库
    
    pqss_imp_qhisdata($dbh,$datafile);  # 10 将当前文件无功功率数据内容入库
    
    pqss_imp_shisdata($dbh,$datafile);  # 11 将当前文件视在功率数据内容入库
    
    pqss_imp_pfhisdata($dbh,$datafile);  # 12 将当前文件功率因数数据内容入库
    
    pqss_imp_hrvhisdata($dbh,$datafile); # 13 将当前文件谐波电压含有率数据内容入库
    
    pqss_imp_hihisdata($dbh,$datafile); # 14 将当前文件谐波电流数据内容入库
        
    pqss_imp_thdvhisdata($dbh,$datafile); # 15 将当前文件电压总谐波畸变率数据内容入库
    
    pqss_imp_thdihisdata($dbh,$datafile); # 16 将当前文件电流总谐波畸变率数据内容入库
        
    pqss_imp_plthisdata($dbh,$datafile); # 17 将当前文件长时闪变数据内容入库
    
    pqss_imp_psthisdata($dbh,$datafile); # 18 将当前文件短时闪变数据内容入库
    
    pqss_imp_energypphisdata($dbh,$datafile); # 19 将当前文件正向有功电度数据内容入库
    
    pqss_imp_energynphisdata($dbh,$datafile); # 20 将当前文件反向有功电度数据内容入库
    
    pqss_imp_energypqhisdata($dbh,$datafile); # 21 将当前文件正向无功电度数据内容入库
    
    pqss_imp_energynqhisdata($dbh,$datafile); # 22 将当前文件反向无功电度数据内容入库

    pqss_imp_energypshisdata($dbh,$datafile); # 23 将当前文件正向视在电度数据内容入库
}

sub get_ratedovlt{  # 从pqssbase库的表paramsunit或paramsgb获取标准电压
    my ($uid) = @_;
    my ($ret,$dbh);
    
    my $sql = "select ratedvolt from paramsunit where unitid = cast('$uid' as varchar(10));";
    
    $dbh = wode_db_conn($DSN_BASE);
    
    $dbh->Sql($sql);   
    $dbh->FetchRow();
    $ret = $dbh->Data;
    #wtlog("-->sub get_ratedovlt-->uid=$uidn");
    if($ret)
    {
        #wtlog("-->sub get_ratedovlt--> 1--ret=$retn");
        wode_db_close($dbh);
        return $ret;
    }
    else
    {
        $sql = "select ratedvolt from paramsgb where gbid = 3;";
        $dbh->Sql($sql);   
        $dbh->FetchRow();
        $ret = $dbh->Data;
        #wtlog("-->sub get_ratedovlt-->2--ret=$retn");
        wode_db_close($dbh);
        return $ret/sqrt(3);
    }
}

sub pqss_imp_vhisdata{  # 1 将当前文件电压数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname,$uid,$dva,$dvb,$dvc,$ratedvolt);
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理id
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "vhisdata";
    
    $data_hash{21} = nullif($data_hash{21});
    $data_hash{22} = nullif($data_hash{22});
    $data_hash{23} = nullif($data_hash{23});
    $data_hash{24} = nullif($data_hash{24});
    $data_hash{25} = nullif($data_hash{25});
    $data_hash{26} = nullif($data_hash{26});
    if(($data_hash{21} =~ /null/i)  &&
       ($data_hash{22} =~ /null/i)  &&
       ($data_hash{23} =~ /null/i)  &&
       ($data_hash{24} =~ /null/i)  &&
       ($data_hash{25} =~ /null/i)  &&
       ($data_hash{26} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $ratedvolt = get_ratedovlt($uid);
    #wtlog("-->sub pqss_imp_vhisdata--> ratedvolt=$ratedvoltn");
    $dva = $data_hash{21} - $ratedvolt;
    $dvb = $data_hash{23} - $ratedvolt;
    $dvc = $data_hash{25} - $ratedvolt;
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = '$uid';
            
            insert into $tabname(unitid,rectime,
                                 va,dva,angleva,vamax,vamin,
                                 vb,dvb,anglevb,vbmax,vbmin,
                                 vc,dvc,anglevc,vcmax,vcmin
                                )
            values( $uid,'$rectm',
                    $data_hash{21},$dva,$data_hash{22},$data_hash{21},$data_hash{21},
                    $data_hash{23},$dvb,$data_hash{24},$data_hash{23},$data_hash{23},
                    $data_hash{25},$dvc,$data_hash{26},$data_hash{25},$data_hash{26}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_fvhisdata{  # 2 将当前文件基波电压数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "fvhisdata";
    
    $data_hash{901}  = nullif($data_hash{901});
    $data_hash{1001} = nullif($data_hash{1001});
    $data_hash{1101} = nullif($data_hash{1101});
    $data_hash{1201} = nullif($data_hash{1201});
    $data_hash{1301} = nullif($data_hash{1301});
    $data_hash{1401} = nullif($data_hash{1401});
 
    if(($data_hash{901} =~ /null/i)   &&
       ($data_hash{1001} =~ /null/i)  &&
       ($data_hash{1101} =~ /null/i)  &&
       ($data_hash{1201} =~ /null/i)  &&
       ($data_hash{1301} =~ /null/i)  &&
       ($data_hash{1401} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }               
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 fva,anglefva,fvamax,fvamin,
                                 fvb,anglefvb,fvbmax,fvbmin,
                                 fvc,anglefvc,fvcmax,fvcmin
                                )
            values( $uid,'$rectm',
                    $data_hash{901},$data_hash{1001},$data_hash{901},$data_hash{901},
                    $data_hash{1101},$data_hash{1201},$data_hash{1101},$data_hash{1101},
                    $data_hash{1301},$data_hash{1401},$data_hash{1301},$data_hash{1301}                  
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_psvhisdata{  # 3 将当前文件相序电压数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "psvhisdata";
    
    $data_hash{71} = nullif($data_hash{71});
    $data_hash{75} = nullif($data_hash{75});
    $data_hash{73} = nullif($data_hash{73});

    if(($data_hash{71} =~ /null/i)  &&
       ($data_hash{73} =~ /null/i)  &&
       ($data_hash{75} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 psv,
                                 zsv,
                                 nsv
                                )
            values( $uid,'$rectm',
                    $data_hash{73},
                    $data_hash{71},
                    $data_hash{75}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_ihisdata{  # 4 将当前文件电流数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "ihisdata";
    
    $data_hash{11} = nullif($data_hash{11});
    $data_hash{12} = nullif($data_hash{12});
    $data_hash{13} = nullif($data_hash{13});
    $data_hash{14} = nullif($data_hash{14});
    $data_hash{15} = nullif($data_hash{15});
    $data_hash{16} = nullif($data_hash{16});
    if(($data_hash{11} =~ /null/i)  &&
       ($data_hash{12} =~ /null/i)  &&
       ($data_hash{13} =~ /null/i)  &&
       ($data_hash{14} =~ /null/i)  &&
       ($data_hash{15} =~ /null/i)  &&
       ($data_hash{16} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 ia,angleia,iamax,iamin,
                                 ib,angleib,ibmax,ibmin,
                                 ic,angleic,icmax,icmin
                                )
            values( $uid,'$rectm',
                    $data_hash{11},$data_hash{12},$data_hash{11},$data_hash{11},
                    $data_hash{13},$data_hash{14},$data_hash{13},$data_hash{13},
                    $data_hash{15},$data_hash{16},$data_hash{15},$data_hash{16}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_fihisdata{  # 5 将当前文件基波电流数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "fihisdata";
    
    $data_hash{301} = nullif($data_hash{301});
    $data_hash{401} = nullif($data_hash{401});
    $data_hash{501} = nullif($data_hash{501});
    $data_hash{601} = nullif($data_hash{601});
    $data_hash{701} = nullif($data_hash{701});
    $data_hash{801} = nullif($data_hash{801});
    if(($data_hash{301} =~ /null/i)  &&
       ($data_hash{401} =~ /null/i)  &&
       ($data_hash{501} =~ /null/i)  &&
       ($data_hash{601} =~ /null/i)  &&
       ($data_hash{701} =~ /null/i)  &&
       ($data_hash{801} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 fia,anglefia,fiamax,fiamin,
                                 fib,anglefib,fibmax,fibmin,
                                 fic,anglefic,ficmax,ficmin
                                )
            values( $uid,'$rectm',
                    $data_hash{301},$data_hash{401},$data_hash{301},$data_hash{301},
                    $data_hash{501},$data_hash{601},$data_hash{501},$data_hash{501},
                    $data_hash{701},$data_hash{801},$data_hash{701},$data_hash{701}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_psihisdata{  # 6 将当前文件相序电流数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "psihisdata";
    
    $data_hash{61} = nullif($data_hash{61});
    $data_hash{65} = nullif($data_hash{65});
    $data_hash{63} = nullif($data_hash{63});

    if(($data_hash{61} =~ /null/i)  &&
       ($data_hash{63} =~ /null/i)  &&
       ($data_hash{65} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 psi,
                                 zsi,
                                 nsi
                                )
            values( $uid,'$rectm',
                    $data_hash{63},
                    $data_hash{61},
                    $data_hash{65}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_unbhisdata{  # 7 将当前文件三相不平衡数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "unbhisdata";
    
    $data_hash{77} = nullif($data_hash{77});
    $data_hash{67} = nullif($data_hash{67});

    if(($data_hash{77} =~ /null/i)  &&
       ($data_hash{67} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                  vunb,vunbmax,vunbmin,
                                  iunb,iunbmax,iunbmin
                                )
            values( $uid,'$rectm',
                    $data_hash{77},$data_hash{77},$data_hash{77},
                    $data_hash{67},$data_hash{67},$data_hash{67}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_freqhisdata{  # 8 将当前文件频率数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "freqhisdata";
    
    $data_hash{111} = nullif($data_hash{111});

    if($data_hash{111} =~ /null/i)
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                  freq,freqmax,freqmin
                                )
            values( $uid,'$rectm',
                    $data_hash{111},$data_hash{111},$data_hash{111}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_phisdata{  # 9 将当前文件有功功率数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "phisdata";
    
    $data_hash{81} = nullif($data_hash{81});
    $data_hash{82} = nullif($data_hash{82});
    $data_hash{83} = nullif($data_hash{83});
    $data_hash{84} = nullif($data_hash{84});

    if(($data_hash{81} =~ /null/i)  &&
       ($data_hash{82} =~ /null/i)  &&
       ($data_hash{83} =~ /null/i)  &&
       ($data_hash{84} =~ /null/i))
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 pa,pamax,pamin,
                                 pb,pbmax,pbmin,
                                 pc,pcmax,pcmin,
                                 pt,ptmax,ptmin
                                )
            values( $uid,'$rectm',
                    $data_hash{81},$data_hash{81},$data_hash{81},
                    $data_hash{82},$data_hash{82},$data_hash{82},
                    $data_hash{83},$data_hash{83},$data_hash{83},
                    $data_hash{84},$data_hash{84},$data_hash{84}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_qhisdata{  # 10 将当前文件无功功率数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "qhisdata";
    
    $data_hash{91} = nullif($data_hash{91});
    $data_hash{92} = nullif($data_hash{92});
    $data_hash{93} = nullif($data_hash{93});
    $data_hash{94} = nullif($data_hash{94});

    if(($data_hash{91} =~ /null/i)  &&
       ($data_hash{92} =~ /null/i)  &&
       ($data_hash{93} =~ /null/i)  &&
       ($data_hash{94} =~ /null/i))
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 qa,qamax,qamin,
                                 qb,qbmax,qbmin,
                                 qc,qcmax,qcmin,
                                 qt,qtmax,qtmin
                                )
            values( $uid,'$rectm',
                    $data_hash{91},$data_hash{91},$data_hash{91},
                    $data_hash{92},$data_hash{92},$data_hash{92},
                    $data_hash{93},$data_hash{93},$data_hash{93},
                    $data_hash{94},$data_hash{94},$data_hash{94}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_shisdata{  # 11 将当前文件视在功率数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "shisdata";
    
    $data_hash{96} = nullif($data_hash{96});
    $data_hash{97} = nullif($data_hash{97});
    $data_hash{98} = nullif($data_hash{98});
    $data_hash{99} = nullif($data_hash{99});

    if(($data_hash{96} =~ /null/i)  &&
       ($data_hash{97} =~ /null/i)  &&
       ($data_hash{98} =~ /null/i)  &&
       ($data_hash{99} =~ /null/i))
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 sa,samax,samin,
                                 sb,sbmax,sbmin,
                                 sc,scmax,scmin,
                                 st,stmax,stmin
                                )
            values( $uid,'$rectm',
                    $data_hash{96},$data_hash{96},$data_hash{96},
                    $data_hash{97},$data_hash{97},$data_hash{97},
                    $data_hash{98},$data_hash{98},$data_hash{98},
                    $data_hash{99},$data_hash{99},$data_hash{99}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_pfhisdata{  # 12 将当前文件功率因数数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "pfhisdata";
    
    $data_hash{101} = nullif($data_hash{101});
    $data_hash{102} = nullif($data_hash{102});
    $data_hash{103} = nullif($data_hash{103});
    $data_hash{104} = nullif($data_hash{104});

    if(($data_hash{101} =~ /null/i)  &&
       ($data_hash{102} =~ /null/i)  &&
       ($data_hash{103} =~ /null/i)  &&
       ($data_hash{104} =~ /null/i))
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 pfa,pfamax,pfamin,
                                 pfb,pfbmax,pfbmin,
                                 pfc,pfcmax,pfcmin,
                                 pft,pftmax,pftmin
                                )
            values( $uid,'$rectm',
                    $data_hash{101},$data_hash{101},$data_hash{101},
                    $data_hash{102},$data_hash{102},$data_hash{102},
                    $data_hash{103},$data_hash{103},$data_hash{103},
                    $data_hash{104},$data_hash{104},$data_hash{104}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_hrvhisdata{  # 13 将当前文件谐波电压含有率数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "hrvhisdata";
    
    $data_hash{902} = nullif($data_hash{902});
    $data_hash{903} = nullif($data_hash{903});
    $data_hash{904} = nullif($data_hash{904});
    $data_hash{905} = nullif($data_hash{905});
    $data_hash{906} = nullif($data_hash{906});
    $data_hash{907} = nullif($data_hash{907});
    $data_hash{908} = nullif($data_hash{908});
    $data_hash{909} = nullif($data_hash{909});
    $data_hash{910} = nullif($data_hash{910});
    $data_hash{911} = nullif($data_hash{911});
    $data_hash{912} = nullif($data_hash{912});
    $data_hash{913} = nullif($data_hash{913});
    $data_hash{914} = nullif($data_hash{914});
    $data_hash{915} = nullif($data_hash{915});
    $data_hash{916} = nullif($data_hash{916});
    $data_hash{917} = nullif($data_hash{917});
    $data_hash{918} = nullif($data_hash{918});
    $data_hash{919} = nullif($data_hash{919});
    $data_hash{920} = nullif($data_hash{920});
    $data_hash{921} = nullif($data_hash{921});
    $data_hash{922} = nullif($data_hash{922});
    $data_hash{923} = nullif($data_hash{923});
    $data_hash{924} = nullif($data_hash{924});
    $data_hash{925} = nullif($data_hash{925});
    $data_hash{1102} = nullif($data_hash{1102});
    $data_hash{1103} = nullif($data_hash{1103});
    $data_hash{1104} = nullif($data_hash{1104});
    $data_hash{1105} = nullif($data_hash{1105});
    $data_hash{1106} = nullif($data_hash{1106});
    $data_hash{1107} = nullif($data_hash{1107});
    $data_hash{1108} = nullif($data_hash{1108});
    $data_hash{1109} = nullif($data_hash{1109});
    $data_hash{1110} = nullif($data_hash{1110});
    $data_hash{1111} = nullif($data_hash{1111});
    $data_hash{1112} = nullif($data_hash{1112});
    $data_hash{1113} = nullif($data_hash{1113});
    $data_hash{1114} = nullif($data_hash{1114});
    $data_hash{1115} = nullif($data_hash{1115});
    $data_hash{1116} = nullif($data_hash{1116});
    $data_hash{1117} = nullif($data_hash{1117});
    $data_hash{1118} = nullif($data_hash{1118});
    $data_hash{1119} = nullif($data_hash{1119});
    $data_hash{1120} = nullif($data_hash{1120});
    $data_hash{1121} = nullif($data_hash{1121});
    $data_hash{1122} = nullif($data_hash{1122});
    $data_hash{1123} = nullif($data_hash{1123});
    $data_hash{1124} = nullif($data_hash{1124});
    $data_hash{1125} = nullif($data_hash{1125});
    $data_hash{1302} = nullif($data_hash{1302});
    $data_hash{1303} = nullif($data_hash{1303});
    $data_hash{1304} = nullif($data_hash{1304});
    $data_hash{1305} = nullif($data_hash{1305});
    $data_hash{1306} = nullif($data_hash{1306});
    $data_hash{1307} = nullif($data_hash{1307});
    $data_hash{1308} = nullif($data_hash{1308});
    $data_hash{1309} = nullif($data_hash{1309});
    $data_hash{1310} = nullif($data_hash{1310});
    $data_hash{1311} = nullif($data_hash{1311});
    $data_hash{1312} = nullif($data_hash{1312});
    $data_hash{1313} = nullif($data_hash{1313});
    $data_hash{1314} = nullif($data_hash{1314});
    $data_hash{1315} = nullif($data_hash{1315});
    $data_hash{1316} = nullif($data_hash{1316});
    $data_hash{1317} = nullif($data_hash{1317});
    $data_hash{1318} = nullif($data_hash{1318});
    $data_hash{1319} = nullif($data_hash{1319});
    $data_hash{1320} = nullif($data_hash{1320});
    $data_hash{1321} = nullif($data_hash{1321});
    $data_hash{1322} = nullif($data_hash{1322});
    $data_hash{1323} = nullif($data_hash{1323});
    $data_hash{1324} = nullif($data_hash{1324});
    $data_hash{1325} = nullif($data_hash{1325});
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 hrva2,hrva3,hrva4,hrva5,hrva6,hrva7,hrva8,hrva9,hrva10,
                                 hrva11,hrva12,hrva13,hrva14,hrva15,hrva16,hrva17,hrva18,
                                 hrva19,hrva20,hrva21,hrva22,hrva23,hrva24,hrva25,
                                 
                                 hrvb2,hrvb3,hrvb4,hrvb5,hrvb6,hrvb7,hrvb8,hrvb9,hrvb10,
                                 hrvb11,hrvb12,hrvb13,hrvb14,hrvb15,hrvb16,hrvb17,hrvb18,
                                 hrvb19,hrvb20,hrvb21,hrvb22,hrvb23,hrvb24,hrvb25,
                                 
                                 hrvc2,hrvc3,hrvc4,hrvc5,hrvc6,hrvc7,hrvc8,hrvc9,hrvc10,
                                 hrvc11,hrvc12,hrvc13,hrvc14,hrvc15,hrvc16,hrvc17,hrvc18,
                                 hrvc19,hrvc20,hrvc21,hrvc22,hrvc23,hrvc24,hrvc25
                                )
            values( $uid,'$rectm',
                      $data_hash{902},
                      $data_hash{903},
                      $data_hash{904},
                      $data_hash{905},
                      $data_hash{906},
                      $data_hash{907},
                      $data_hash{908},
                      $data_hash{909},
                      $data_hash{910},
                      $data_hash{911},
                      $data_hash{912},
                      $data_hash{913},
                      $data_hash{914},
                      $data_hash{915},
                      $data_hash{916},
                      $data_hash{917},
                      $data_hash{918},
                      $data_hash{919},
                      $data_hash{920},
                      $data_hash{921},
                      $data_hash{922},
                      $data_hash{923},
                      $data_hash{924},
                      $data_hash{925},
                    $data_hash{1102},
                    $data_hash{1103},
                    $data_hash{1104},
                    $data_hash{1105},
                    $data_hash{1106},
                    $data_hash{1107},
                    $data_hash{1108},
                    $data_hash{1109},
                    $data_hash{1110},
                    $data_hash{1111},
                    $data_hash{1112},
                    $data_hash{1113},
                    $data_hash{1114},
                    $data_hash{1115},
                    $data_hash{1116},
                    $data_hash{1117},
                    $data_hash{1118},
                    $data_hash{1119},
                    $data_hash{1120},
                    $data_hash{1121},
                    $data_hash{1122},
                    $data_hash{1123},
                    $data_hash{1124},
                    $data_hash{1125},
                      $data_hash{1302},
                      $data_hash{1303},
                      $data_hash{1304},
                      $data_hash{1305},
                      $data_hash{1306},
                      $data_hash{1307},
                      $data_hash{1308},
                      $data_hash{1309},
                      $data_hash{1310},
                      $data_hash{1311},
                      $data_hash{1312},
                      $data_hash{1313},
                      $data_hash{1314},
                      $data_hash{1315},
                      $data_hash{1316},
                      $data_hash{1317},
                      $data_hash{1318},
                      $data_hash{1319},
                      $data_hash{1320},
                      $data_hash{1321},
                      $data_hash{1322},
                      $data_hash{1323},
                      $data_hash{1324},
                      $data_hash{1325}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_hihisdata{  # 14 将当前文件谐波电流数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "hihisdata";
    
    $data_hash{302} = nullif($data_hash{302});
    $data_hash{303} = nullif($data_hash{303});
    $data_hash{304} = nullif($data_hash{304});
    $data_hash{305} = nullif($data_hash{305});
    $data_hash{306} = nullif($data_hash{306});
    $data_hash{307} = nullif($data_hash{307});
    $data_hash{308} = nullif($data_hash{308});
    $data_hash{309} = nullif($data_hash{309});
    $data_hash{310} = nullif($data_hash{310});
    $data_hash{311} = nullif($data_hash{311});
    $data_hash{312} = nullif($data_hash{312});
    $data_hash{313} = nullif($data_hash{313});
    $data_hash{314} = nullif($data_hash{314});
    $data_hash{315} = nullif($data_hash{315});
    $data_hash{316} = nullif($data_hash{316});
    $data_hash{317} = nullif($data_hash{317});
    $data_hash{318} = nullif($data_hash{318});
    $data_hash{319} = nullif($data_hash{319});
    $data_hash{320} = nullif($data_hash{320});
    $data_hash{321} = nullif($data_hash{321});
    $data_hash{322} = nullif($data_hash{322});
    $data_hash{323} = nullif($data_hash{323});
    $data_hash{324} = nullif($data_hash{324});
    $data_hash{325} = nullif($data_hash{325});
    $data_hash{502} = nullif($data_hash{502});
    $data_hash{503} = nullif($data_hash{503});
    $data_hash{504} = nullif($data_hash{504});
    $data_hash{505} = nullif($data_hash{505});
    $data_hash{506} = nullif($data_hash{506});
    $data_hash{507} = nullif($data_hash{507});
    $data_hash{508} = nullif($data_hash{508});
    $data_hash{509} = nullif($data_hash{509});
    $data_hash{510} = nullif($data_hash{510});
    $data_hash{511} = nullif($data_hash{511});
    $data_hash{512} = nullif($data_hash{512});
    $data_hash{513} = nullif($data_hash{513});
    $data_hash{514} = nullif($data_hash{514});
    $data_hash{515} = nullif($data_hash{515});
    $data_hash{516} = nullif($data_hash{516});
    $data_hash{517} = nullif($data_hash{517});
    $data_hash{518} = nullif($data_hash{518});
    $data_hash{519} = nullif($data_hash{519});
    $data_hash{520} = nullif($data_hash{520});
    $data_hash{521} = nullif($data_hash{521});
    $data_hash{522} = nullif($data_hash{522});
    $data_hash{523} = nullif($data_hash{523});
    $data_hash{524} = nullif($data_hash{524});
    $data_hash{525} = nullif($data_hash{525});
    $data_hash{702} = nullif($data_hash{702});
    $data_hash{703} = nullif($data_hash{703});
    $data_hash{704} = nullif($data_hash{704});
    $data_hash{705} = nullif($data_hash{705});
    $data_hash{706} = nullif($data_hash{706});
    $data_hash{707} = nullif($data_hash{707});
    $data_hash{708} = nullif($data_hash{708});
    $data_hash{709} = nullif($data_hash{709});
    $data_hash{710} = nullif($data_hash{710});
    $data_hash{711} = nullif($data_hash{711});
    $data_hash{712} = nullif($data_hash{712});
    $data_hash{713} = nullif($data_hash{713});
    $data_hash{714} = nullif($data_hash{714});
    $data_hash{715} = nullif($data_hash{715});
    $data_hash{716} = nullif($data_hash{716});
    $data_hash{717} = nullif($data_hash{717});
    $data_hash{718} = nullif($data_hash{718});
    $data_hash{719} = nullif($data_hash{719});
    $data_hash{720} = nullif($data_hash{720});
    $data_hash{721} = nullif($data_hash{721});
    $data_hash{722} = nullif($data_hash{722});
    $data_hash{723} = nullif($data_hash{723});
    $data_hash{724} = nullif($data_hash{724});
    $data_hash{725} = nullif($data_hash{725});
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 hia2,hia3,hia4,hia5,hia6,hia7,hia8,hia9,hia10,
                                 hia11,hia12,hia13,hia14,hia15,hia16,hia17,hia18,
                                 hia19,hia20,hia21,hia22,hia23,hia24,hia25,
                                 
                                 hib2,hib3,hib4,hib5,hib6,hib7,hib8,hib9,hib10,
                                 hib11,hib12,hib13,hib14,hib15,hib16,hib17,hib18,
                                 hib19,hib20,hib21,hib22,hib23,hib24,hib25,
                                 
                                 hic2,hic3,hic4,hic5,hic6,hic7,hic8,hic9,hic10,
                                 hic11,hic12,hic13,hic14,hic15,hic16,hic17,hic18,
                                 hic19,hic20,hic21,hic22,hic23,hic24,hic25
                                )
            values( $uid,'$rectm',
                      $data_hash{302},
                      $data_hash{303},
                      $data_hash{304},
                      $data_hash{305},
                      $data_hash{306},
                      $data_hash{307},
                      $data_hash{308},
                      $data_hash{309},
                      $data_hash{310},
                      $data_hash{311},
                      $data_hash{312},
                      $data_hash{313},
                      $data_hash{314},
                      $data_hash{315},
                      $data_hash{316},
                      $data_hash{317},
                      $data_hash{318},
                      $data_hash{319},
                      $data_hash{320},
                      $data_hash{321},
                      $data_hash{322},
                      $data_hash{323},
                      $data_hash{324},
                      $data_hash{325},
                    $data_hash{502},
                    $data_hash{503},
                    $data_hash{504},
                    $data_hash{505},
                    $data_hash{506},
                    $data_hash{507},
                    $data_hash{508},
                    $data_hash{509},
                    $data_hash{510},
                    $data_hash{511},
                    $data_hash{512},
                    $data_hash{513},
                    $data_hash{514},
                    $data_hash{515},
                    $data_hash{516},
                    $data_hash{517},
                    $data_hash{518},
                    $data_hash{519},
                    $data_hash{520},
                    $data_hash{521},
                    $data_hash{522},
                    $data_hash{523},
                    $data_hash{524},
                    $data_hash{525},
                      $data_hash{702},
                      $data_hash{703},
                      $data_hash{704},
                      $data_hash{705},
                      $data_hash{706},
                      $data_hash{707},
                      $data_hash{708},
                      $data_hash{709},
                      $data_hash{710},
                      $data_hash{711},
                      $data_hash{712},
                      $data_hash{713},
                      $data_hash{714},
                      $data_hash{715},
                      $data_hash{716},
                      $data_hash{717},
                      $data_hash{718},
                      $data_hash{719},
                      $data_hash{720},
                      $data_hash{721},
                      $data_hash{722},
                      $data_hash{723},
                      $data_hash{724},
                      $data_hash{725}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_thdvhisdata{  # 15 将当前文件电压总谐波畸变率数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "thdvhisdata";
    
    $data_hash{211} = nullif($data_hash{211});
    $data_hash{212} = nullif($data_hash{212});
    $data_hash{213} = nullif($data_hash{213});

    if(($data_hash{211} =~ /null/i)  &&
       ($data_hash{212} =~ /null/i)  &&
       ($data_hash{213} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 thdva,thdvamax,thdvamin,
                                 thdvb,thdvbmax,thdvbmin,
                                 thdvc,thdvcmax,thdvcmin
                                )
            values( $uid,'$rectm',
                    $data_hash{211},$data_hash{211},$data_hash{211},
                    $data_hash{212},$data_hash{212},$data_hash{212},
                    $data_hash{213},$data_hash{213},$data_hash{213}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_thdihisdata{  # 16 将当前文件电流总谐波畸变率数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "thdihisdata";
    
    $data_hash{201} = nullif($data_hash{201});
    $data_hash{202} = nullif($data_hash{202});
    $data_hash{203} = nullif($data_hash{203});

    if(($data_hash{201} =~ /null/i)  &&
       ($data_hash{202} =~ /null/i)  &&
       ($data_hash{203} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 thdia,thdiamax,thdiamin,
                                 thdib,thdibmax,thdibmin,
                                 thdic,thdicmax,thdicmin
                                )
            values( $uid,'$rectm',
                    $data_hash{201},$data_hash{201},$data_hash{201},
                    $data_hash{202},$data_hash{202},$data_hash{202},
                    $data_hash{203},$data_hash{203},$data_hash{203}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_plthisdata{  # 17 将当前文件长时闪变数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "plthisdata";
    
    $data_hash{241} = nullif($data_hash{241});
    $data_hash{242} = nullif($data_hash{242});
    $data_hash{243} = nullif($data_hash{243});

    if(($data_hash{241} =~ /null/i)  &&
       ($data_hash{242} =~ /null/i)  &&
       ($data_hash{243} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 plta,
                                 pltb,
                                 pltc
                                )
            values( $uid,'$rectm',
                    $data_hash{241},
                    $data_hash{242},
                    $data_hash{243}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_psthisdata{  # 18 将当前文件短时闪变数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "psthisdata";
    
    $data_hash{231} = nullif($data_hash{231});
    $data_hash{232} = nullif($data_hash{232});
    $data_hash{233} = nullif($data_hash{233});

    if(($data_hash{231} =~ /null/i)  &&
       ($data_hash{232} =~ /null/i)  &&
       ($data_hash{233} =~ /null/i) )
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 psta,
                                 pstb,
                                 pstc
                                )
            values( $uid,'$rectm',
                    $data_hash{231},
                    $data_hash{232},
                    $data_hash{233}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_energypphisdata{  # 19 将当前文件正向有功电度数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "energypphisdata";
    
    $data_hash{124} = nullif($data_hash{124});

    if($data_hash{124} =~ /null/i)
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 totalvaluet
                                )
            values( $uid,'$rectm',
                    $data_hash{124}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_energynphisdata{  # 20 将当前文件反向有功电度数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "energynphisdata";
    
    $data_hash{125} = nullif($data_hash{125});

    if($data_hash{125} =~ /null/i)
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 totalvaluet
                                )
            values( $uid,'$rectm',
                    $data_hash{125}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_energypqhisdata{  # 21 将当前文件正向无功电度数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "energypqhisdata";
    
    $data_hash{134} = nullif($data_hash{134});

    if($data_hash{134} =~ /null/i)
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 totalvaluet
                                )
            values( $uid,'$rectm',
                    $data_hash{134}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_energynqhisdata{  # 22 将当前文件反向无功电度数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "energynqhisdata";
    
    $data_hash{135} = nullif($data_hash{135});

    if($data_hash{135} =~ /null/i)
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 totalvaluet
                                )
            values( $uid,'$rectm',
                    $data_hash{135}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}

sub pqss_imp_energypshisdata{  # 23 将当前文件正向视在电度数据内容入库
    my ($dbh,$datafile) = @_;
    my ($sql,$rc,$tabname);
    my $uid ;
    
    $datafile =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i;
    $uid = $1;  # 物理电表ID
    
    my $rectm = datatm2sqltm($data_rectime);
    $tabname = "energypshisdata";
    
    $data_hash{140} = nullif($data_hash{140});

    if($data_hash{140} =~ /null/i)
    {
        wtlog("pqss load $datafile,table->$tabname no record!n");
        return undef;
    }
    
    $sql = "delete from $tabname
            where  rectime = '$rectm' and unitid = cast($uid as varchar(10));
            
            insert into $tabname(unitid,rectime,
                                 totalvaluet
                                )
            values( $uid,'$rectm',
                    $data_hash{140}
                  );
           ";
    $rc = wode_sql_exec($dbh,$sql);
    if($rc)
    {
        my $err = $dbh->Error();
        $err = $err."-->sql-->$sqln";
        wtlog("$err");
        return 1;
    }
    else
    {  
        wtlog("pqss load $datafile,table->$tabname ok!n");
        return undef;
    }
}


sub wode_sql_exec{
    my ($dbh,$sql) = @_;
    my $rc = $dbh->Sql($sql); # 执行SQL语句
    if($rc)
    {
        return 1;
    }
    else
    {
        return undef;
    }
}

sub compute_meter_inx_on_load_meter{ # 计算meter id 在load_meter中的索引
    my ($meter) = @_;
    my $i;
    if(1 == $load_config_flag) # 按配置
    {
        #计算当前文件相应的电表在@load_meter的下标
        for($i = 0; $i < @load_meter; $i++)
        {
            if($load_meter[$i] =~ /$meter/)
            {
                return $i;
            }
        }
    }
    elsif(0 == $load_config_flag) # 按默认全加载
    {
        return 0;
    }
    else
    {
        wtlog("Error load_config_flag(0或1) $load_config_flag!n");
    }
    #print "-->sub do_convert-->meter=$meter,inx=$in";
}

sub do_convert{        # 转换由fetch_load_data得到的数据文件内容,%data_hash
    my ($load_data_file) = @_;           # 不带路径的数据文件名:$load_data_file
    my($i,$k,$tmp,$meter,$inx,$con_flag);
    
    if($load_data_file =~ /.*_.*_.*_.*_((d){7,8})_.*.Dst/i)
    {
        $meter = $1;  # 取出当前文件对应的物理电表ID ,1101001
    }
    if($load_data_file =~ /.*_.*_.*_.*_.*_((d){14}).Dst/i)
    {
        $data_rectime = $1;   #取出当前文件的日期时间 20101218235039
    }
    
    $i = compute_meter_inx_on_load_meter($meter);
    
    #wtlog("-->sub do_convert--> meter $meter inx=$i, data_rectime = $data_rectimen");

    $inx = $i;   #当前文件相应的电表在load_meter的下标,而对于load_meter2是第几类表
    
    get_load_convert($inx); #取出电表的转换规则,%convert_array_hash(数组的散列)
    
    foreach $k (keys %data_hash) #根据转换规则,转换 y = (x-a) × b / c
    {
        foreach $i (keys %convert_array_hash)
        {
            if($k eq $i)
            {
                #wtlog("-->sub do_convert--> convert $kn");
                $con_flag = 1;  #当前列需要转换
                last;
            }
        }
        if(1 == $con_flag)  
        {
            $con_flag = 0;
            my $a = $convert_array_hash{$k}[0];
            my $b = $convert_array_hash{$k}[1];
            my $c = $convert_array_hash{$k}[2];
            #print "n--> sub do_convert-->k=$k,a=$a,b=$b,c=$cn";
            if(0 == $c)
            {
                wtlog("--> sub do_convert-->k=$k,c=$cn");
                next;
            }
            my $tmp = $data_hash{$k};
            $data_hash{$k} = ($data_hash{$k} - $a) * $b / $c;
            $data_hash2{$k} = ($tmp - $a) * $b / $c;    # %data_hash2 for debug
        }
    }
}

sub fetch_load_data{   #获取数据文件内容 %data_hash
    my ($datafile) = @_;
    
    unless(open(FP_H,$datafile))
    {
        wtlog("--> sub fetch_load_data --> Can't open $datafile,$!n");
        return undef;
    }
    my @rdtmp = <FP_H>;
    my $row;
    
    foreach $row (@rdtmp)
    {
        $row =~ s/^n+$//; #去掉连续空白行
        my @row = split(";",join("", split " ",$row));
        foreach (@row)
        {
            if(/(.*)=(.*)/)
            {
                $data_hash{$1} = $2;
            }
        }
    }
}

sub get_meters{   #从配置文件中LOAD_CONFIG配置项获得物理表信息
    my @tmp;    

    if(1 == $load_config_flag)  #按配置加载物理电表
    {
        foreach(@LOAD_INIT)
        {
            if(/load_meters*=s*(.*)/i) #加载的物理电表
            {
                my $tmpx = $1;
                @load_meter = split(",",join("", split " ",$tmpx));
            }
        }
    }
    elsif(0 == $load_config_flag)
    {
        
    }
    else
    {
        wtlog("--> sub get_meters--> error load_cong $load_config_flagn");
    }
}

sub get_load_convert{      # 获取某个或某类物理电表的转换规则
    my ($cvt_inx) = @_;
    my @tmp;
    my $inx;
    my $flag = 0;
    #wtlog("-->1 sub get_load_convert-->n");
    
    if(1 == $load_config_flag)  # 按配置,某个电表的转换规则
    {
        $inx = $meter_convert_inx[$cvt_inx]; # CONFIG_CONVERT_*
        foreach (@LOAD_INIT)
        {
            if(/^[CONFIG_CONVERT_$inx]$/)  #匹配转换规则
            {
                #wtlog("-->3 sub get_load_convert--> 匹配成功n");
                $flag = 1;
                push @tmp,$_;
            }
            elsif(/^[END_CONFIG_CONVERT_$inx]$/)
            {
                $flag = 0;
            }
            if(1 == $flag)
            {
                push @tmp,$_;
            }
        }
    }
    elsif(0 == $load_config_flag) # 默认的转换规则
    {
        foreach (@LOAD_INIT)
        {
            if(/^[DEFAULT_CONVERT]$/)  #匹配转换规则
            {
                $flag = 1;
                push @tmp,$_;
            }
            elsif(/^[END_DEFAULT_CONVERT]$/)
            {
                $flag = 0;
            }
            if(1 == $flag)
            {
                push @tmp,$_;
            }
        }
    }
    else
    {
        wtlog("--> sub get_load_convert--> error load_cong $load_config_flagn");
        return undef;
    }
    
    foreach(@tmp)
    {
        if(/(d+)s*=s*(.*)/i)
        {
            my $inx1 = $1;
            my $inx2 = $2;
            my @cont_array = split(",",join("", split " ",$inx2));
            $convert_array_hash{$inx1} = [ @cont_array ];
            #wtlog("-->2 sub get_load_convert--> @{$convert_array_hash{$inx1}}n");
        }
    }
    
    return 1;
}

sub get_meter_convert_inx{  # #转换规则的索引号
    foreach(@LOAD_INIT)
    {
        if(/meter_convert_inxs*=s*(.*)/i)
        {
            my $tmpx = $1;
            @meter_convert_inx = split(",",join("", split " ",$tmpx));
        }
    }
}

sub get_load_date{     # 配置加载用的,获取加载的日期范围
    my ($count,$dt,$tmpx);
    
    foreach(@LOAD_INIT)
    {
        if(/load_begin_dates*=s*(.*)/i)
        {
            $tmpx = $1;
            $load_beg_date = join("", split " ",$tmpx);
        }
        elsif(/load_end_dates*=s*(.*)/i)
        {
            $tmpx = $1;
            $load_end_date = join("", split " ",$tmpx);
        }
    }
    
    $count = date_between_days($load_beg_date,$load_end_date);
    $dt = $load_beg_date;
    
    while($count)
    {
        push @load_date,$dt;
        $count--;
        $dt = next_day($dt);
    }
}

sub get_load_data_files{ #获取数据文件
    my $olddir = getcwd();
    my $meter;

    chdir $DATAPATH; #切换到数据文件所在的目录
    if($load_config_flag > 0)
    {
        foreach $meter (@load_meter)
        {
            my $dt;
            foreach $dt (@load_date)
            {
                my @tmp = glob("*_*_*_*_${meter}_${dt}*.[Dd][Ss][Tt]"); #匹配文件名
                #my @tmp = glob("*_*_*_*_${meter}_${dt}*.dst"); #匹配文件名,windows忽略大小写,最好用上面的匹配方式
                push @load_data_files, @tmp;
            }
        }
    }
    else
    {
        @load_data_files = glob("*.Dst");
    }
    
    chdir $olddir;
}

sub get_param{ #获取配置参数
    unless(open(FP_H,$pqss_data_load_init))
    {
        wtlog("Can't open $pqss_data_load_init,$!n");
        die "Can't open $pqss_data_load_init,$!n";
    }
    my @rdtmp = <FP_H>;
    my $i;
    
    foreach $i (@rdtmp)
    {
        #$i =~ s/^s+//; #去掉开头空白
        #$i =~ s/s+$//; #去掉结尾空白
        #$i =~ s/s+/ /; #压缩中间空白
        
        $i =~ s/#.+//;   #去掉#及后面的字符
        $i =~ s/^n+$//; #去掉连续空白行
    
        push @LOAD_INIT , $i;
    }
    close(FP_H);
    
    foreach (@LOAD_INIT)
    {
        my $tmpx;    
        if(/DBCONN_POWERs*=s*(.*)/i)
        {
            $tmpx = $1;
            $tmpx = join("",split " ",$tmpx);
            $$DSN_POWER = $tmpx; #"$'";
        }
        elsif(/DBCONN_BASEs*=s*(.*)/i)
        {
            $tmpx = $1;
            $tmpx = join("",split " ",$tmpx);
            $DSN_BASE = $tmpx; #"$'";
        }
        elsif(/LOGPATHs*=s*(.*)/i)
        {
            $tmpx = $1;
            $LOADLOG = join("",split " ",$tmpx)."\$LOADLOG";
        }
        elsif(/OutPutPaths*=s*(.*)/i)
        {
            $tmpx = $1;
            $DATAPATH = join("",split " ",$tmpx);
        }
        elsif(/UnprocessedPaths*=s*(.*)/i)
        {
            $tmpx = $1;
            $UNDOPATH = join("",split " ",$tmpx);
        }
        elsif(/BackUpPaths*=s*(.*)/i)
        {
            $tmpx = $1;
            $BACKUPPATH = join("",split " ",$tmpx);
        }
        elsif(/load_config_flags*=s*(.*)/i)
        {
            $tmpx = $1;
            $load_config_flag = join("", split " ",$tmpx);
        }
    }
}

sub get_time{
        my ($ret,$ye,$mon,$day) = @_;
        my $tc = localtime(time());
        #print "ye:$ye,mon:$mon,day:$dayn";
        #print "year:$tc->year,month:$tc->mon,day:$tc->mdayn";
        $tc = sprintf("%4d%02d%02d%02d%02d%02d",$tc->year+1900+$ye,$tc->mon+1+$mon,$tc->mday+$day, $tc->hour, $tc->min,$tc->sec);
        my $tmp = substr($tc,0,4);
        $ret =~ s/YYYY/$tmp/gi;

        $tmp = substr($tc,4,2);
        $ret =~ s/MM/$tmp/gi;

        $tmp = substr($tc,6,2);
        $ret =~ s/DD/$tmp/gi;

        $tmp = substr($tc,8,2);
        $ret =~ s/HH/$tmp/gi;

        $tmp = substr($tc,10,2);
        $ret =~ s/MI/$tmp/gi;

        $tmp = substr($tc,12,2);
        $ret =~ s/SS/$tmp/gi;
        return $ret;
}

sub nullif{ # 若变量 $data 为 undef (但不包括0值),则返回 NULL
    my ($data) = @_;
    if($data || (length($data)>0))
    {
        return $data;
    }
    else
    {
        return 'NULL';
    }
}

sub datatm2sqltm  # 日期格式转换 "20110322112255" -> "2011-03-22 11:22:55"
{
    my ($tm) = @_;
    my $tmp;
    $tmp = substr($tm,0,4)."-".substr($tm,4,2)."-".substr($tm,6,2)." ".
           substr($tm,8,2).":".substr($tm,10,2).":".substr($tm,12,2);
    return $tmp;
}

sub swap{       # 调用 swap($c1,$c2);
    my ($ref1,$ref2) = @_;
    my $tmp;
    $tmp = $$ref1;
    $$ref1 = $$ref2;
    $$ref2 = $tmp;
}

sub date_between_days{
    my ($curdate,$curdate2) = @_;
    my ($dt,$count_days);
    my $flag = 1;
    
    unless(check_date($curdate) && check_date($curdate2))
    {
        wtlog("date error, $curdate, $curdate2n");
        return undef;
    }
    
    if(date_cmp($curdate,$curdate2) > 0)
    {
        $dt = $curdate; $curdate = $curdate2; $curdate2 = $dt;
        $flag = -1;
    }
    
    $dt = $curdate;
    $count_days = 0;
    while(date_cmp($dt,$curdate2) <= 0)
    {
        $count_days++;
        $dt = next_day($dt);
    }
    
    return ($flag < 0)?(-$count_days):($count_days);
}

sub date_cmp{
    my ($date1,$date2) = @_; #日期格式 20101208
    my ($c1,$c2);
    $c1 = substr($date1,0,4);
    $c2= substr($date2,0,4);
    
    if($c1 < $c2)
    {
        return -1;
    }
    elsif($c1 > $c2)
    {
        return 1;
    }
    else
    {
        $c1 = substr($date1,4,2);
        $c2= substr($date2,4,2);
        if($c1 < $c2)
        {
            return -1;
        }
        elsif($c1 > $c2)
        {
            return 1;
        }
        else
        {
            $c1 = substr($date1,6,2);
            $c2= substr($date2,6,2);
            if($c1 < $c2)
            {
                return -1;
            }
            elsif($c1 > $c2)
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
    }
}

sub check_date{
    my ($curdate) = @_; #20110923
    my $year = substr($curdate,0,4);
    my $month = substr($curdate,4,2);
    my $day = substr($curdate,6,2);    
    my $cur_month_day = get_last_day($curdate); #当前月的天数
    
    unless((length($month) == 2) && (length($day) == 2))
    {
        return undef;
    }
    
    $month =~ s/^0*//;          #去掉前导0
    $day =~ s/^0*//;
    
    if($year > 2099 || $year <= 1900 ||
       $month > 12 || $month <= 0 ||
       $day <= 0 || $day > $cur_month_day
      )
    {
        return undef; #日期不合法
    }
    else
    {
        return 1;
    }    
}
 
sub next_day{
    my ($curdate) = @_; #20110923
    my $year = substr($curdate,0,4);
    my $month = substr($curdate,4,2);
    my $day = substr($curdate,6,2);    
    my $cur_month_day = get_last_day($curdate); #当前月的天数
    
    $month =~ s/^0*//;          #去掉前导0
    $day =~ s/^0*//;
    
    if($day >= $cur_month_day)
    {
        $day = "01";
        if($month >= 12)
        {
            $month = "01";
            $year = $year + 1;
        }
        else
        {
            $month = $month + 1;
            if($month < 10)
            {
                $month = "0".$month;
            }
        }
    }
    else
    {
        $day = $day + 1;
        if($month < 10)
        {
            $month = "0".$month;
        }
        if($day < 10)
        {
            $day = "0".$day;
        }
    }
    return $year.$month.$day;
}

sub get_last_day{
  my ($DateVal) = @_;
  my $Year=substr($DateVal,0,4);
  my $Month=substr($DateVal,4,2);
  my $Day=31;
  if ($Month==1 or $Month==3 or $Month==5 or $Month==7 or $Month==8 or $Month==10 or $Month==12){
     $Day=31;
  }
  if ($Month==4 or $Month==6 or $Month==9 or $Month==11){
     $Day=30;
  }
  if ($Month==2){
    #Check whether is leap year
    if (($Year%4==0) and ($Year%100!=0) or ($Year%400==0)){
      $Day=29;
    }
    else{
      $Day=28;
    }
  }
  return $Day;
}

sub wode_db_conn{
    my($DSN)=@_;
    my $dbh;
    
    #远程连接数据库方式
    #$DSN = "driver={sql server};server=172.26.35.42;DSN=wodeperl;UID=sa;PWD=wode;";
    
    #本地连接数据库方式
    #$DSN = "DSN=zz;UID=sa;PWD=sys;";
    $dbh = new Win32::ODBC($DSN);
    if(! $dbh)
    {
        wtlog("Cannot open new ODBC, DSN = $DSN !n");
        die(Win32::ODBC::Error());
    }

    if(!$dbh->Connection())
    {
        wtlog("Cannot connect!n");
        die(Win32::ODBC::Error());
    }
    return $dbh;
}

sub wode_db_close{
    my($dbh)=@_;
    return $dbh->Close();
}

sub wtlog
{
    my ($log_str,$pathlog) = @_;
    unless($pathlog)
    {
        $pathlog = $LOADLOG;
    }
    open(FP_H, ">>" ,"$pathlog") or die "Log Error:Can't open $pathlog !  $!n";    
    print FP_H $log_str;
    close(FP_H);
}

sub print_array{
    my ($vref) = @_;
    #print "n    ---------now in print_array---------n";
    for (@$vref)
    {
        print $_." ";
        wtlog("$_ ");
    }
}

sub debug_param_print{
    #print_array(@{$LOAD_INIT[0]});
    
    my $curdate = "20110228";    
    my $curdate2 = "20130134";
    if(check_date($curdate))
    {
        my $next_day = next_day($curdate);
        print "n-->curdate=$curdate, next_day=$next_dayn";
    }
    else
    {
        print "n-->error date:$curdaten";
    }
    
    if(date_cmp($curdate,$curdate2)<0)
    {
        print "1---- $curdate < $curdate2n";
    }
    elsif(date_cmp($curdate,$curdate2)>0)
    {
        print "2---- $curdate > $curdate2n";
    }
    else
    {
        print "3---- $curdate = $curdate2n";
    }
    my $dir = getcwd();
    print "--> curdir:$dirn";
    my $dir2 = File::Basename::dirname($0);
    print "-->program path:$dir2n";
    
    my $c1 = "11";
    my $c2 = "22";
    print "--> Before swap c1=$c1,c2=$c2n";
    swap($c1,$c2);  
    print "--> After swap c1=$c1,c2=$c2n";
    
    my $ctdays = date_between_days($curdate,"20110228");
    print "--> count days: $ctdaysn";
    
    my $fam;
    my $k1 = 0;
   
  #---------------------------------------------------------    
    wtlog("$DSN_POWER-->$DSN_POWERn");
    wtlog("LOADLOG-->$LOADLOGn");
    wtlog("BACKUPPATH-->$BACKUPPATHn");
    wtlog("load_beg_date-->$load_beg_daten");
    wtlog("load_end_date-->$load_end_daten");
    wtlog("load_config_flag-->$load_config_flagn");    
    wtlog("n-->load meters-->n");    
    print_array(@load_meter);
    
    wtlog("n-->load dates-->n");
    print_array(@load_date);
    
    wtlog("n-->load data files $#load_data_filesn");
    print_array(@load_data_files);
    
  #-----------------------------------------
    my $datafile = $DATAPATH."\$load_data_files[0]";
    
    wtlog("nn-->test convert data file--> $datafilen");
    fetch_load_data($datafile);
    for $fam (sort keys %data_hash)
    {
        wtlog(" $fam=$data_hash{$fam}n");
    }    
    
    do_convert($load_data_files[0]);
    
    wtlog("n-->convert rule-->n");
    for $fam (sort keys %convert_array_hash)
    {
        wtlog("--$fam: @{$convert_array_hash{$fam}}n");
    }
    
    wtlog("n-->after convert -->n");
    foreach $fam (sort keys %data_hash)
    {
        if($data_hash2{$fam})
        {
            $k1++;
            wtlog("-->$k1, key $fam-->1:$data_hash{$fam},2:$data_hash2{$fam}n");
        }
    }
  #---------------------------------------------------------    
   
    my @test_arr = (1,2,"x3",4,"512");
    my $x_arr = $#test_arr;
    print "-->x_arr = $x_arrn";
    
    my $k;
    my %hash_test = (
            21 => 6000.12,
            23 => 6100.50,
        );
    $hash_test{25} = 5000;
    foreach $k (keys %hash_test)
    {
        print "--> key $k => $hash_test{$k}n";
    }
    print "--> key 27 => $hash_test{27}n";
    
    my $sqltm = datatm2sqltm("20110322112255");
    print "20110322112255 -> $sqltmn";

    #move("$test_move_file","$test_move_file2") or die "n $! n";

}

#主程序
main();

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论1 条评论

fjzcaufjzcau系统运维工程师金融
2014-06-07 23:15
以前写过的perl脚本,细节自己都看不懂了。
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广