中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]自动处理节目表中的数字
作者:
标题: [求助]自动处理节目表中的数字 上一主题 | 下一主题
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『楼 主』:  [求助]自动处理节目表中的数字

有一节目表文件a.txt内容如下(更新问题):

非常感谢大家回复,问题有新的变化。
09/06/14
01:40 电视剧:承诺(3)12
13:45 电视剧:康熙微服私访记222/30
03:14 电视剧:大明奇才 (第5集)
07:25 周末剧场 连续剧 开心老爸(16)
19:35 电视剧:我的丑娘26
19:11 电视剧:清凌凌的水蓝莹莹的天Ⅱ12/36
06:18 艺术人生:展现艺术家的人生
13:03 午间剧场:我叫金三顺(19—20)
08:12 剧场:宰相刘罗锅29
20:00 剧场:金婚(25——26)
13:44 剧场:情之缘21、22、23
17:45 天下故事
请求写一批处理:有集数行后边加上(第X集)X的值从行中取得。表示日期的行,已带有第X集行,没数字的行均不处理),想了很久没搞定,行数为10万行左右,要求高效,必要时可以用p+sed 等外部命令。谢谢~

[ Last edited by sady2009 on 2009-6-14 at 11:21 ]

2009-6-14 02:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 2 楼』:  

我来抛砖引玉。
s/[ \t]*$//
s/)[0-9][0-9]/& (第&集)/;s/第)/第/
s#[0-9][0-9]/.*#& (第&集)#
s#[0-9]/.*#& (第&集)#
s/集).*/集)/1
s#(第.*/.*/.*##
/:/s#/[0-9][0-9]##2;/:/s#/[0-9]##2
以上代码复制到1.txt中
在命令行输入
sed -f 1.txt a.txt




三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2009-6-14 03:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 3 楼』:  


set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("a.txt")
do while file.atendofstream<>true
        n=file.readline
        if re(n)<>"" then n=re(n)
        s=s & n & vbcrlf
loop
file.close
msgbox s
function re(a)
        set rex=new regexp
        rex.pattern="(\d{2}:\d{2}) ?电视剧(\W*)(\d{1,3})/(\d{1,3})"
        rex.global=true
        set mats=rex.execute(a)
        for each m in mats
                i=m.submatches(2):j=m.submatches(3)
                re=replace(m, i & "/" & j,"(第" & i & "集)")
        next
end function


2009-6-14 04:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 4 楼』:  

jmz573515兄,01:40 电视剧:承诺(3)12  这行没变,还有12:47 电视剧:康熙微服私访记221/30 (第21集)这是21集。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2009-6-14 04:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 5 楼』:  

谢谢提醒,但是想了半天也没想出“电视剧:康熙微服私访记221/30 (第21集)这是21集。”这个该怎么处理  - - !
set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("a.txt")
do while file.atendofstream<>true
        n=file.readline
        if re(n)<>"" then n=re(n)
        s=s & n & vbcrlf
loop
file.close
msgbox s
function re(a)
        set rex=new regexp
        rex.pattern="(\d{2}:\d{2}) ?电视剧(\W*)(\d{1,3})/(\d{1,3})|\d{2}:\d{2} ?电视剧\W*(\(\d\))(\d{1,3})"
        rex.global=true
        set mats=rex.execute(a)
        for each m in mats
                i=m.submatches(2):j=m.submatches(3)
                re=replace(m, i & "/" & j,"(第" & i & "集)")
                if m.submatches(5)<>"" then re=replace(m,m.submatches(5),"(第" & m.submatches(5) & "集)")
        next
end function


2009-6-14 05:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





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

后面的30是全集数吧。。。

所以21应该能容易得到



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-6-14 05:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


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

那如果出现类似
12:47 电视剧:康熙微服私访记21/30
13:45 电视剧:康熙微服私访记22/30

没有分界符不好判断

[ Last edited by yishanju on 2009-6-14 at 06:17 ]




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





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 8 楼』:  

牛人真多,非常谢谢大家的关注。

另外,还有其他情况。更新在顶楼

有些情况比较特殊。象12:47 电视剧:康熙微服私访记221/30有歧义的(是1集还是21集?)。这种情很少,可以不用考虑

再次感谢给出代码的朋友。辛苦了~

[ Last edited by sady2009 on 2009-6-14 at 11:23 ]

2009-6-14 10:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 9 楼』:  

看来这个问题还是有点难度的。要高效还要准确,难以兼顾。如果能高效点,牺牲点准确性也是可以接受的。

2009-6-15 13:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 10 楼』:  

在处理文本方面,本就没有通用的代码,都是有针对性的,或说是局限性。
下面是1.txt内容,很懒,就不再简化了,不过效率还是不错的。
s/[ \t]*$/%/
s/)[0-9][0-9]/& (第&集)/;s/第)/第/
s#[0-9][0-9]/.*#& (第&集)#
s#[0-9]/.*#& (第&集)#
s/集).*/集)/1
s#(第.*/.*/.*##
/:/s#/[0-9][0-9]##2;/:/s#/[0-9]##2
/、/s/..、..、../& (第&/;s/、..、..%$/集)/
s/(.*)/& (第&集)/;s/第(/第/;s/)集/集/;s/—..集/集/
/——/s/(.*/& (第&集/;s/——..)%集/集)/;s/第(/第/
s/%//
/:/s/[0-9][0-9]$/& (第&集)/
s/%//




三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2009-6-15 22:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: