Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65906
  • 博文数量: 14
  • 博客积分: 328
  • 博客等级: 一等列兵
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-22 12:19
文章分类

全部博文(14)

文章存档

2012年(14)

分类: Python/Ruby

2012-11-15 19:09:01

一、需求①

目录名:/opt/etl_data/log/standlog

该目录下有日期目录:
/opt/etl_data/log/standlog/2012-10-22
/opt/etl_data/log/standlog/2012-10-23
/opt/etl_data/log/standlog/2012-10-24
.....

每个日期目录下有相应的日期文件:
/opt/etl_data/log/standlog/2012-10-22/20121022
/opt/etl_data/log/standlog/2012-10-23/20121023
/opt/etl_data/log/standlog/2012-10-24/20121024
.....

现要通过一个子程序实现将上述的日期文件找出来。

实现方法:


点击(此处)折叠或打开

  1. sub product_filename{
  2.    my ($dir)=@_;
  3.    my (@datename,@list,$date);
  4.    opendir DIR,$dir or die "Cann't open the $dir";
  5.    @list=readdir DIR or die;
  6.    for my $file (@list){
  7.       next if $file =~ /\./;
  8.       next if $file =~ /\.\./;
  9.       push @datename,$file;
  10.    }
  11.    my ($dirname,@dirlist);
  12.    for my $listdir (@datename){
  13.       $dirname=$dir."/".$listdir;
  14.       push @dirlist,$dirname;
  15.    }
  16.    my ($filename,$time,@filenames);
  17.    for (@dirlist){
  18.      $time = "$1$2$3" if /(\d+)-(\d+)-(\d+)$/;
  19.      $filename = $_."/".$time;
  20.      push @filenames,$filename;
  21.    }
  22.    return @filenames;
  23. }

参数传递:

点击(此处)折叠或打开

  1. my $dir="/opt/etl_data/log/standlog";
  2. my @datelist=&product_filename($dir);


二、 需求②

现要针对这些文件作一些比对,根据我所要输入的日期时间段,找出对应的文件。
比如,我输入20121001  20121031,会打印出这个时间段的日期文件。

该子程序实现为:

点击(此处)折叠或打开

  1. sub file_compare{
  2.    my ($filetime,@filenames)=@_;
  3.    my (%times);
  4.    for (@filenames){
  5.       $times{$_}="$1" if /(\d+)$/;
  6.    }
  7.    for my $key (keys %times){
  8.       if ($filetime eq $times{$key}){
  9.           return $key;
  10.       }
  11.    }
  12. }

file_compare子程序是将文件名作为键,文件名的最后一段日期作为值,存入%times散列表。
然后将传入的$filetime与%times散列表中的值进行比对,如果相同,返回文件名。


阅读(1599) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~