|
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 |
|