中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 02:24
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]自动处理节目表中的数字 查看 934 回复 9
楼 主 [求助]自动处理节目表中的数字 发表于 2009-06-14 02:51 ·  中国 浙江 温州 苍南县 电信
初级用户
★★
积分 58
发帖 60
注册 2009-02-18 12:48
17年会员
UID 139163
性别 男
状态 离线
有一节目表文件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 ]
2 发表于 2009-06-14 03:14 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
我来抛砖引玉。
s/*$//
s/)/& (第&集)/;s/第)/第/
s#/.*#& (第&集)#
s#/.*#& (第&集)#
s/集).*/集)/1
s#(第.*/.*/.*##
/:/s#/##2;/:/s#/##2

以上代码复制到1.txt中
在命令行输入
sed -f 1.txt a.txt
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
3 发表于 2009-06-14 04:41 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
19年会员
UID 73417
性别 男
状态 离线

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
4 发表于 2009-06-14 04:55 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
jmz573515兄,01:40 电视剧:承诺(3)12 这行没变,还有12:47 电视剧:康熙微服私访记221/30 (第21集)这是21集。
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
5 发表于 2009-06-14 05:11 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
19年会员
UID 73417
性别 男
状态 离线
谢谢提醒,但是想了半天也没想出“电视剧:康熙微服私访记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
6 发表于 2009-06-14 05:21 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
后面的30是全集数吧。。。

所以21应该能容易得到
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
7 发表于 2009-06-14 06:14 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
那如果出现类似
12:47 电视剧:康熙微服私访记21/30
13:45 电视剧:康熙微服私访记22/30

没有分界符不好判断

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

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
8 发表于 2009-06-14 10:52 ·  中国 浙江 温州 苍南县 电信
初级用户
★★
积分 58
发帖 60
注册 2009-02-18 12:48
17年会员
UID 139163
性别 男
状态 离线
牛人真多,非常谢谢大家的关注。

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

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

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

[ Last edited by sady2009 on 2009-6-14 at 11:23 ]
9 发表于 2009-06-15 13:06 ·  中国 浙江 温州 永嘉县 电信
初级用户
★★
积分 58
发帖 60
注册 2009-02-18 12:48
17年会员
UID 139163
性别 男
状态 离线
看来这个问题还是有点难度的。要高效还要准确,难以兼顾。如果能高效点,牺牲点准确性也是可以接受的。
10 发表于 2009-06-15 22:12 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
在处理文本方面,本就没有通用的代码,都是有针对性的,或说是局限性。
下面是1.txt内容,很懒,就不再简化了,不过效率还是不错的。
s/*$/%/
s/)/& (第&集)/;s/第)/第/
s#/.*#& (第&集)#
s#/.*#& (第&集)#
s/集).*/集)/1
s#(第.*/.*/.*##
/:/s#/##2;/:/s#/##2
/、/s/..、..、../& (第&/;s/、..、..%$/集)/
s/(.*)/& (第&集)/;s/第(/第/;s/)集/集/;s/—..集/集/
/——/s/(.*/& (第&集/;s/——..)%集/集)/;s/第(/第/
s/%//
/:/s/$/& (第&集)/
s/%//
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
论坛跳转: