免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5444 | 回复: 22
打印 上一主题 下一主题

如何选取年份 [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-16 14:49 |只看该作者 |倒序浏览
我看了篇帖子, 内容如下:
请各位高手帮忙一下在两个日期之中  要精确打印出相隔10年之内行  不超出10年 谢谢各位
a.txt日期之间是空格分开的
1999121 20050806
20050806 1999121

19901019 2016515

99121 050806
050806 99121

901019 16515

打印出相隔10年行结果
1999121 20050806
20050806 1999121

99121 050806
050806 99121

这个相隔年数最好能手动调整一下  比如5年之内

能不能把破绽看在前2位数或前4位数比较?如若不好搞,可以把这两类分开进行写的
分类1:前4位类型
分类2:前2位类型
谢谢了

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2016-05-16 14:51 |只看该作者
本帖最后由 sunzhiguolu 于 2016-05-16 15:22 编辑

我想用正则表达式匹配出符合条件的年份信息, 好像没有什么思路, 像这种问题该如何处理, 还请大家指点, 谢谢大家...

另外, 帖子中的年份信息我有2点疑惑:
99121 050806
901019 16515

对于 0 开头的年份信息是否就可以判断为 2005
而 9 开头的年份信息就可以判断 1999

数字 1 开头的情况, 可能要分为两种情况: {198842 (属于 2019 还是 1988 当然这个年份是我捏造的), 16 (2016)}

这样理解会不会存在误判的情况, 谢谢大家...

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
3 [报告]
发表于 2016-05-16 15:16 |只看该作者
本帖最后由 sunzhiguolu 于 2016-05-16 15:16 编辑

还是简单点, 字符串长度大于某个取值时选取特定长度的字符作为年份信息. 感觉有点乱, 请大家指点...

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
4 [报告]
发表于 2016-05-16 15:26 |只看该作者
最后一句话, 这种情况是不是应该直接问 发帖人 如何处理啊??!!

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
5 [报告]
发表于 2016-05-16 16:49 |只看该作者
自己顶顶, 等大神解答下...

论坛徽章:
0
6 [报告]
发表于 2016-05-16 17:32 |只看该作者
回复 1# sunzhiguolu


    1999121 20050806
20050806 1999121

19901019 2016515

99121 050806
050806 99121

这格式 .... 很随意

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
7 [报告]
发表于 2016-05-16 17:48 |只看该作者
回复 6# L_WC
这种情况, 还能处理吗,,, 还请您指点...

   

论坛徽章:
0
8 [报告]
发表于 2016-05-16 18:10 |只看该作者
回复 7# sunzhiguolu

把date month去掉  就是year, 不过就像你觉得例子, xxYY, 这个xx过几年 真心不知道是啥了


   

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 很给力!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
9 [报告]
发表于 2016-05-16 18:15 |只看该作者
本帖最后由 sunzhiguolu 于 2016-05-16 18:17 编辑

回复 8# L_WC
明白了, 谢谢您指点...

   

论坛徽章:
0
10 [报告]
发表于 2016-05-16 18:19 |只看该作者
本帖最后由 L_WC 于 2016-05-17 17:34 编辑

年份前两位还是有Bug
  1. use Date::Calc qw(Delta_YMD);

  2. my $deltaY = 5;

  3. while(<DATA>){
  4.         chomp;
  5.         s/^\s+//g;
  6.         next unless length;
  7.         my ($date1, $date2) = split;
  8.                 my ($date_1, $date_2) = (&Pro($date1), &Pro($date2));
  9.                 my ($y, $m, $d);
  10.                 if($date_1 < $date_2){
  11.                         ($y, $m, $d) = &DiffDay($date_1, $date_2);
  12.                         if($y > $deltaY){
  13.                                 print "$_\n";
  14.                         }
  15.                         if($y == $deltaY && $m > 0){
  16.                                 print "$_\n";
  17.                         }
  18.                         if($y == $deltaY && $m == 0 && $d >=0){
  19.                                 print "$_\n";
  20.                         }
  21.                 }
  22.                 else{
  23.                         ($y, $m, $d) = &DiffDay($date_2, $date_1);
  24.                         if($y > $deltaY){
  25.                                 print "$_\n";
  26.                         }
  27.                         if($y == $deltaY && $m > 0){
  28.                                 print "$_\n";
  29.                         }
  30.                         if($y == $deltaY && $m == 0 && $d >=0){
  31.                                 print "$_\n";
  32.                         }
  33.                 }
  34. }

  35. sub Pro(){
  36.                 my $date = shift;
  37.                 if(length($date) == 5){
  38.                 if($date =~ /^[0|1]/){
  39.                         $date = '20'.$date;  ## this is a bug
  40.                     }
  41.                 if($date =~ /^[8|9]/){
  42.                         $date = '19'.$date;  ##
  43.                 }      
  44.         }
  45.         if(length($date) == 6){
  46.             if($date =~ /^[0|1]/){
  47.                     $date = '20'.$date;   ##
  48.             }
  49.             if($date =~ /^[8|9]/){
  50.                     $date = '19'.$date;   ##
  51.             }        
  52.         }
  53.         return $date;
  54. }

  55. sub DiffDay(){

  56.        my  ($earlier, $later) = @_;

  57.        my  $days;

  58.        my  ($earlierYear, $earlierMonth, $earlierDay) = &ConvertDateFormat($earlier);

  59.        my  ($laterYear, $laterMonth, $laterDay) = &ConvertDateFormat($later);

  60.        @days =  Delta_YMD($earlierYear, $earlierMonth, $earlierDay, $laterYear, $laterMonth, $laterDay);

  61.        return  @days;

  62. }

  63. sub ConvertDateFormat(){

  64.        my  ($date) = @_;

  65.        my  ($year, $month, $day) = ();

  66.        if($date =~  m/(\d{4})(\d+)(\d{2})/g){

  67.               ($year, $month, $day) = ($1, $2, $3);

  68.        }

  69.        $month =~  s/0?(\d)/$1/g;

  70.        return  ($year, $month, $day);

  71. }


  72. __DATA__
  73. 1999121 20050806
  74. 20050806 1999121

  75. 19901019 2016515

  76. 99121 050806
  77. 050806 99121

  78. 901019 16515
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP