楼 主
[已解决]如何计算例中两个时间的差?
发表于 2008-07-21 17:21 · 中国 湖南 长沙 电信
初级用户
★★
积分 103 发帖 52 注册 2007-04-13 05:20 19年会员 UID 84975 性别 男
状态 离线
由于工作原因,我要收集一下各电视台播放节目的时间段及时长
在计算时长方面,很考验数学能力。。。
算着算着就晕了
我把一个用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 ]
第 2 楼
发表于 2008-07-21 19:12 · 中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212 发帖 2,478 注册 2007-02-08 23:39 19年会员 UID 79003 性别 男
状态 离线
。。。excel不是能计算呢?
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
第 3 楼
发表于 2008-07-21 19:17 · 中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
第 4 楼
发表于 2008-07-21 19:19 · 中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268 发帖 879 注册 2006-12-19 16:23 19年会员 UID 73968 性别 男
状态 离线
计算不难,关键是不知道你的节目名称有多长,没办法排版。
再说你一行的内容也太长了吧,记事本都自动换行了,看的我眼花缭乱。。。呵呵。。
假设你的每行都是 4 个节目。
以下只是得到结果,未作排版。
@echo off
echo 开始时间 名称 时长 开始时间 名称 时长 开始时间 名称 时长 开始时间 名称
echo .
for /l %%a in ( 1 2 7) do set .%%a =%%a
for /f " skip=1 delims =" %%i in ( a.txt) do (
setlocal enabledelayedexpansion
for %%a in ( %%i ) do (
set /a n+=1&set " var="
if defined .!n! (
set str=%%a &set str1=!str:~0 ,2! &set str1=!str1:: =! &set " str2=!str: *:=! "
set /a str2=100!str2! %%100
if !str1! equ 0 set /a str1=24
set /a str=str1*60+str2
if defined m (
if !str! lss !m! set /a str+=1440
set /a var=str-m
)
set " m=!str! "
)
set /p =%%a !var! <nul
)
echo .
endlocal
)
pause
小楼一夜听春雨 2008-07-21 19:31
[
Last edited by 26933062 on 2008-7-21 at 07:42 PM ]
致精致简!
第 5 楼
发表于 2008-07-21 19:40 · 中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105 发帖 1,276 注册 2008-03-08 13:00 18年会员 UID 112398 性别 男
状态 离线
晕,小楼兄总是领先一步:
@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
第 6 楼
发表于 2008-07-21 19:43 · 中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268 发帖 879 注册 2006-12-19 16:23 19年会员 UID 73968 性别 男
状态 离线
刚才未对 0:00 点及 跨天数的处理,现以在4楼更新。
致精致简!
第 7 楼
发表于 2008-07-22 10:20 · 中国 湖南 长沙 电信
初级用户
★★
积分 103 发帖 52 注册 2007-04-13 05:20 19年会员 UID 84975 性别 男
状态 离线
第 8 楼
发表于 2008-07-22 14:01 · 中国 北京 光环新网
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488 发帖 1,357 注册 2006-05-20 12:00 20年会员 UID 55770
状态 离线
楼主也不说一下怎么解决的?
有问题请发论坛或者自行搜索,再短消息问我的统统是SB
第 9 楼
发表于 2008-07-24 10:16 · 中国 湖南 长沙 电信
初级用户
★★
积分 103 发帖 52 注册 2007-04-13 05:20 19年会员 UID 84975 性别 男
状态 离线
Originally posted by yishanju at 2008-7-22 02:01 PM:
楼主也不说一下怎么解决的?
开始我是想用EXCEL的函数去解决,后来发现手动添加函数太费神
还是用的
五楼大大 bat-zw
写的代码用的有效
不过在节目名字中出现半角状态的冒号“:”时会出现错误
正在想办法解决中。。。
感谢大家对我的帮助,昨天试图用bat-zw的代码时不知哪里出错导致我不能使用,又发了一个帖求助,实为资源浪费。。。
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正