中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]如何计算例中两个时间的差?
作者:
标题: [已解决]如何计算例中两个时间的差? 上一主题 | 下一主题
flybird2020
初级用户





积分 103
发帖 52
注册 2007-4-13
状态 离线
『楼 主』:  [已解决]如何计算例中两个时间的差?

由于工作原因,我要收集一下各电视台播放节目的时间段及时长
在计算时长方面,很考验数学能力。。。
算着算着就晕了

我把一个用EXCEL文件存储的文件先复制到TXT文件中(有制表符),不知能否通过批处理程序,计算出以下格式的同一行内前后相隔一列的时间差(节目播放时长,以分钟为计数形式),并导出到新的TXT中(备我再次覆盖到EXCEL中)
原数据
开始时间        节目名称        开始时间        节目名称        开始时间        节目名称        开始时间        节目名称
6:44        节目一        6:50        节目二        8:00        节目三        12:00        节目四
6:48        节目一        7:50        节目二        8:20        节目三        15:00        节目四
若可以,我希望得到的数据
开始时间        节目名称        节目时长        开始时间        节目名称        节目时长        开始时间        节目名称        节目时长        开始时间        节目名称
6:44        节目一        6        6:50        节目二        70        8:00        节目三        240        12:00        XXXX
6:48        节目一        62        7:50        节目二        30        8:20        节目三        160        11:00        XXXX
不知能否达成,先谢谢各位兄台了,辛苦了

[ Last edited by flybird2020 on 2008-7-22 at 10:20 AM ]

2008-7-21 17:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

。。。excel不是能计算呢?



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-7-21 19:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 3 楼』:  

excel的函数功能很强大啊,楼主不会用?



2008-7-21 19:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 4 楼』:  

计算不难,关键是不知道你的节目名称有多长,没办法排版。
再说你一行的内容也太长了吧,记事本都自动换行了,看的我眼花缭乱。。。呵呵。。
假设你的每行都是 4 个节目。
以下只是得到结果,未作排版。

  Quote:

  1. @echo off
  2. echo 开始时间 名称  时长 开始时间 名称 时长 开始时间 名称 时长 开始时间 名称
  3. echo.
  4. for /l %%a in (1 2 7) do set .%%a=%%a
  5. for /f "skip=1 delims=" %%i in (a.txt) do (
  6.    setlocal enabledelayedexpansion
  7.    for %%a in (%%i) do (
  8.       set /a n+=1&set "var="
  9.       if defined .!n! (
  10.          set str=%%a&set str1=!str:~0,2!&set str1=!str1::=!&set "str2=!str:*:=!"
  11.          set /a str2=100!str2!%%100
  12.          if !str1! equ 0 set /a str1=24
  13.          set /a str=str1*60+str2
  14.          if defined m (
  15.            if !str! lss !m! set /a str+=1440
  16.            set /a var=str-m
  17.          )
  18.          set "m=!str!"
  19.        )
  20.        set /p=%%a !var! <nul
  21.     )
  22.     echo.
  23.     endlocal
  24. )
  25. pause
                小楼一夜听春雨  2008-07-21  19:31

[ Last edited by 26933062 on 2008-7-21 at 07:42 PM ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 yishanju 分数: +2  时间:2008-7-22 14:01




致精致简!
2008-7-21 19:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 5 楼』:  

晕,小楼兄总是领先一步:
@echo off&setlocal enabledelayedexpansion
echo 开始时间        节目名称        节目时长        开始时间        节目名称        节目时长        开始时间        节目名称        节目时长        开始时间        节目名称>a.txt
for /f "skip=2 delims=" %%a in (1.txt) do (
    for %%i in (%%a) do (
        set "str=%%i"
        if "!str:*:=!" neq "%%i" (
           set /a n+=1,x=n-1
           set .!n!=%%i&call :lp
        )
        if "!str!" neq "节目四" (set /p=!str!        <nul>>a.txt) else (set /p=xxxx<nul>>a.txt)
     )
     echo.>>a.txt&set "n=0"&set "num=0"
)
start a.txt&goto :eof
:lp
for /f "tokens=1,2 delims=:" %%i in ("!.%x%!") do set "s1=%%i"&set "m1=%%j"
for /f "tokens=1,2 delims=:" %%i in ("!.%n%!") do set "s2=%%i"&set "m2=%%j"
set /a s=100%s2%%%100-100%s1%%%100,m=100%m2%%%100-100%m1%%%100
if %s% lss 0 set /a s+=24
if %m% lss 0 set /a s-=1,m+=60
set /a m=s*60+m
if %n% neq 1 set "str=%m%        %str%"
ps:因论坛处理不了制表符,请楼主复制代码后相应的空格换成制表符,"        "即为制表符。

[ Last edited by zw19750516 on 2008-7-21 at 08:22 PM ]



批处理之家新域名:www.bathome.net
2008-7-21 19:40
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 6 楼』:  

刚才未对 0:00 点及 跨天数的处理,现以在4楼更新。



致精致简!
2008-7-21 19:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flybird2020
初级用户





积分 103
发帖 52
注册 2007-4-13
状态 离线
『第 7 楼』:  

谢谢大大们,问题已解决,辛苦啦

2008-7-22 10:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 8 楼』:  

楼主也不说一下怎么解决的?




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2008-7-22 14:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flybird2020
初级用户





积分 103
发帖 52
注册 2007-4-13
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by yishanju at 2008-7-22 02:01 PM:
楼主也不说一下怎么解决的?

开始我是想用EXCEL的函数去解决,后来发现手动添加函数太费神
还是用的
五楼大大 bat-zw
写的代码用的有效
不过在节目名字中出现半角状态的冒号“:”时会出现错误
正在想办法解决中。。。

感谢大家对我的帮助,昨天试图用bat-zw的代码时不知哪里出错导致我不能使用,又发了一个帖求助,实为资源浪费。。。

2008-7-24 10:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: