Board logo

标题: [文本处理] 如何统计指定时间段内数据 [打印本页]

作者: snowsilent    时间: 2009-8-24 15:01     标题: 如何统计指定时间段内数据

文本文件result.txt中记录了这样一些信息,如何统计某一时间段内的信息个数,如2008-01-01 - 2009-01-02,等待高手指教
[2007-12-05 17:53:53] STATUS  
[2008-01-01 18:43:09] STATUS  
。。。
[2009-01-02 18:43:09] STATUS  
[2009-01-03 09:11:15] STATUS
作者: namejm    时间: 2009-8-24 15:17

  演示代码如下(起止日期都统计在内):
  1. @echo off
  2. set time1=2008-01-01
  3. set time2=2009-01-02
  4. set num=0
  5. for /f "tokens=1*" %%i in (result.txt) do (
  6.     if "%%i" geq "[%time1%" (
  7.         if "%%i" leq "[%time2%" set /a num+=1
  8.     )
  9. )
  10. echo %time1%~%time2%的信息条数为:%num%
  11. pause
复制代码

作者: Lumiere    时间: 2009-8-24 22:24

  1. @echo off
  2. for /f %%a in ('findstr "2008-01-01" result.txt') do set /a n+=1
  3. set /a n-=1
  4. echo 之间的信息条数是%n%
  5. pause
复制代码

作者: zqz0012005    时间: 2009-8-24 23:15

如果时间和数据都在一行内,直接find就行了
  1. find /c "2008-01-01" <result.txt
复制代码

作者: Lumiere    时间: 2009-8-25 00:04     标题: 回复 4楼 的帖子

find要减一才对,第一行不能算
作者: zqz0012005    时间: 2009-8-25 00:12     标题: 回复 5楼 的帖子

为何不能算?否则岂不是每天的记录都会少一条?
作者: namejm    时间: 2009-8-25 00:41

  楼主要统计的是某个时间段的条数啊,不是某一天的,各位没看错吧。
作者: Lumiere    时间: 2009-8-25 08:50     标题: 回复 6楼 的帖子

既然说的是之间,那么第一条当然不能算啊。比如说1和10之间的所有整数,你不能把1也算了吧?
作者: Lumiere    时间: 2009-8-25 08:52     标题: 回复 7楼 的帖子

我觉得可能。楼主在顶楼的陈述感觉像是要找出同一天内的信息条数。从文本内容看似乎是那样,不确定楼主意思到底是什么。
作者: snowsilent    时间: 2009-8-25 10:06

2楼的代码很好用,就是这个意思。可能没把问题说清楚造成了困惑,不是找同一天的信息条数,是找某一日期段内的数据,和日期后的具体时间没关系。
作者: Lumiere    时间: 2009-8-25 12:50     标题: 回复 10楼 的帖子

看吧,你开始写的是某一时间段内的,而不是某一日期段内的,这样人家结合你的举例还有文本内容就误解了。所以提问最好陈述清楚。2楼4楼都是高手牛逼人,他们的代码对于你这样简单的问题当然是很好用啦,要不还做什么管理员版主啊,我这把杀鸡刀就够了……呵呵




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2