文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>H码头csv文件处理。

H码头csv文件处理。

时间:2008-10-18  来源:weicr

电信运营商结算用H码表都是以excel文档下发到各分公司, 然后由分公司相应人员插入到数据库表中,由于H码数量(行)/ 省市(列)每次数量都不一样, 因此很难运用先手工将excel文件导入到数据库表中,然后写个存储过程来取得相应的插入SQL语句的方法. 而且,每一省份的同一条线路又有N多码段,码段处于同一单元格中,用“、”号分开, 如有顺序码段,则用“-”开隔 eg   省市     1110H1H2H3         1103H1H2H3   。。。。。。每次下发都不同数量 湖南     023、046、078-083   011、033 上海                         076-089 .....也就是说 对湖南的1110H1H2H3 有023 046 和078,079,080,081,082,083 每一码段都要生成一条记录。 每个月要插8、9百条记录,手工操用至少要一天时间才能确保准确全部录入, 很烦人。(主要是看走眼容易出错,错一条可不得了,总部下文批死人) 不过用上了 perl 一切就简单了。 先将excel文件打开另存为CSV文件,如下代码一秒钟就能取得所有插入语句, 核对下没啥问题就OK了。   #! /arrayacct/user/uniacc/perl/bin/perl
use strict;
use Fatal qw / open close / ;
open hm_file,"<",$ARGV[0];     #参数一
open insert_fd,">",$ARGV[1];   #参数二
my $line_no=undef;             #CSV文件行号
my @field_name=undef;          #总部下发的EXEL文档字段数组
my $seq=undef;                 #插入序列便于核对程序运行结果
##############################预设前导SQL###############################################
my $pre_sql="INSERT INTO hm_input_t(seq,stat_date,province,city,area_code,"
            ."hm_head,hm_body,hm_code) \n VALUES(";
while (my $line= <hm_file>) {
   $line_no=$line_no+1;
   if ($line_no ==  1) {
      chomp(@field_name=split ",",$line);                #获取字段名数组
      foreach (@field_name) {
        s/^\s+|\s+$//g;                                  #除掉微软^M
      }
      foreach my $field_index (3..$#field_name) {
         if ($field_name[$field_index]=~/\d+/) {         #取出H码头后回写到H码头数组
         $field_name[$field_index]=$&;
         }
      }
   }
   else {
      chomp(my  @field_value=split ",",$line);           #获取字段值
      foreach (@field_value) {
         s/^\s+|\s+$//g;                                 #除掉微软回车加换行 ^M
      }
      ####去除总部下发文件中的统计部分一般最下面两行####################################
      if ($field_value[1] && $field_value[2]) {
          foreach my $field_index (3..$#field_name) {
             if ($field_value[$field_index]) {
                chomp( my @sec=split "、",$field_value[$field_index]);
                foreach my $context(@sec) {
                  $context=~s/^\s+|\s+$//g;              #经测试^M无孔不入真骚
                  if ($context=~/\-/) {
                     my $down=$`;
                     my $up=$';
                     foreach ($down..$up) {
                              $seq=$seq+1;
                              s/^\s+|\s+$//g;
                              my $sql=$pre_sql.$seq.","
                                              ."TO_CHAR(SYSDATE,'YYYYMM')".","
                                              ."'".$field_value[0]."',"
                                              ."'".$field_value[1]."',"
                                              ."'".$field_value[2]."',"
                                              ."'".$field_name[$field_index]."',"
                                              ."'".$_."',"
                                              ."'".$field_nam[$field_index].$_."');";
                              print insert_fd $sql."\n";
                     }
                  }
                  else {
                        $seq=$seq+1;
                        my $sql= $pre_sql.$seq.","
                                         ."TO_CHAR(SYSDATE,'YYYYMM')".","
                                         ."'".$field_value[0]."',"
                                         ."'".$field_value[1]."',"
                                         ."'".$field_value[2]."',"
                                         ."'".$field_name[$field_index]."',"
                                         ."'".$context."',"
                                         ."'".$field_name[$field_index].$context."');";
                        print  insert_fd $sql."\n";
                  }
                }
             }
          }
      }
   }
}
close insert_fd;
close hm_file;
相关阅读 更多 +
排行榜 更多 +
别惹神枪手安卓版

别惹神枪手安卓版

冒险解谜 下载
坦克战争世界

坦克战争世界

模拟经营 下载
丛林反击战

丛林反击战

飞行射击 下载