免费注册 查看新帖 |

Chinaunix

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

怎样查询文本文件中符合条件的记录啊? [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-01 14:01 |只看该作者 |倒序浏览
要和别的程序做集成.接口文件是下图所示格式的文本文件.首列是时间,如:"20130726-084636"表示"2013-07-26 08:46:36".我想查询某个时间段的记录,
如:"2013-07-26 10:46:36"-"2013-07-27 01:46:36" 之间的记录,该怎么实现呢?
  1. 20130726-084636         2.02M    0        2.284   
  2. 20130726-094636         2.02M    0        2.278   
  3. 20130726-104636         2.02M    0        2.288   
  4. 20130726-114636         2.02M    0        2.277   
  5. 20130726-124636         2.02M    0        2.269   
  6. 20130726-134636         2.02M    0        2.299   
  7. 20130726-144636         2.02M    0        2.281   
  8. 20130726-154636         2.02M    0        2.281   
  9. 20130726-164636         2.02M    0        2.278   
  10. 20130726-174636         2.02M    0        2.27   
  11. 20130726-184636         2.02M    0        2.273   
  12. 20130726-194635         2.02M    0        2.263   
  13. 20130726-204635         2.02M    0        2.267   
  14. 20130726-214636         2.02M    0        2.279   
  15. 20130726-224636         2.02M    0        2.275   
  16. 20130726-234636         2.02M    0        2.285   
  17. 20130727-004636         2.02M    0        2.382
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-08-01 16:40 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2013-08-01 20:49 |只看该作者
你卡在哪里?数据量大不?

把日期格式转化成时间戳比较贝

论坛徽章:
0
4 [报告]
发表于 2013-08-02 11:18 |只看该作者
正则表达式呗!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
5 [报告]
发表于 2013-08-02 11:21 |只看该作者
回复 3# liuxingyuyuni


    数据量很大,应在10万条的级别.

论坛徽章:
0
6 [报告]
发表于 2013-08-02 16:31 |只看该作者
好像这个能工作,呵呵
  1. $fp=fopen('log_file','r');
  2. while(!feof($fp)){
  3.     $str=fgets($fp,1024);
  4.     $date_=substr($str,0,8);
  5.     $time_=(int)substr($str,9,6);

  6.     $min_date=20130726;
  7.     $min_time=104636;

  8.     $max_date=20130727;
  9.     $max_time=14636;

  10.     if($date_<$min_date||$date_>$max_date){
  11.         continue;
  12.     }
  13.     if($date_==$min_date && $time_<$min_time){
  14.         continue;
  15.     }
  16.     if($date_==$max_date && $time_>$max_time){
  17.         continue;
  18.     }

  19.     # 到达这里的是符合条件的记录
  20.     echo $str;

  21.     # 如果你的记录是按时间排序的 那么大于20130727-014636后可以结束循环
  22. }
复制代码
回复 1# plumdavid


   

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
7 [报告]
发表于 2013-08-02 17:44 |只看该作者
回复 6# linguijiang


    我文本处理刚学,fopen等命令不熟,你的例子我得好好学习学习,你的例子收藏了.

    非常感谢.

论坛徽章:
0
8 [报告]
发表于 2013-08-02 19:10 |只看该作者
一行一行的读取

论坛徽章:
0
9 [报告]
发表于 2013-08-02 20:38 |只看该作者
//loop file
while(...) {
     //record timestamp
     list($date, $time) = explode('-', "20130726-084636");
     $timestamp = strtotime($date . ' ' . $time);

     //timestamp of start and end time
     $time_start = 123;
     $time_end   = 246;
     if( ($time_start < $timestamp) && ($timestamp < $time_end) ) {
          //do something
     }
}

建议set_time_limit(0),既然是中间接口数据那10W条数据量是不是有一点不太合理?你可以给上面程序提提意见,API数据这么搞不合理的。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
10 [报告]
发表于 2013-08-02 22:10 |只看该作者
回复 9# liuxingyuyuni


    接口文件是监控日志文件,保存2年的.有什么好办法处理呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP