|
kcdsw
中级用户
积分 404
发帖 179
注册 2006-3-30
状态 离线
|
『楼 主』:
求vbs处理文本的脚本
各位老师好
因为手头上有不少doc文件需要做处理,想处理成xml格式的.
可是word里的xml格式与我想要的不相符.
我在网上找了很久 也不得要领. 特向大家求救!
之所以考虑用vbs , 目的是想最终用word 的宏来实现自动处理.
希望各位路过的兄弟们能帮我出出主意!
原文件结构.(doc)
第一卷(卷名)第一章(章名)
正文
第一卷(卷名)第二章(章名)
正文
.......
第二卷(卷名)第一章(章名)
正文
第二卷(卷名)第二章(章名)
正文
........
目标结构:(xml)
<book>
<juan>卷名
<zhang>章名
<zhengwen>正文
</zhengwen>
</zhang>
</juan>
<juan>卷名
<zhang>章名
<zhengwen>正文
</zhengwen>
</zhang>
</juan>
</book>
在众多朋友的帮助下,终于有了解决方案
目前输出的xml已经是标准xml了
我还想添加上 拖拽功能,和选择框效果
找了N多帖子,不得要领 还请各位兄弟帮忙
on error resume next
dim n,y
set ws=createobject("wscript.shell")
set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("needhelp.txt",1)
do while file.atendofstream<>true
'去除前导空格
n=ltrim(file.readline)
'调用pd
call pd(n)
s=s & n & vbcrlf
loop
file.close
h=instr(s,"<juan>第")
jiewei=left(s,h-6):kaishi=mid(s,h-2)
set file=fso.createtextfile("out.xml",ture)
head ="<?xml version=""1.0"" encoding=""UTF-8""?>" & vbcrlf & "<book>" & vbcrlf
foot =VbCrLf & "</book>"
file.write head & kaishi & jiewei & foot
file.close
ws.run "explorer out.xml"
sub pd(a)
l=instr(a," ")
z=left(a,l-1)
'用空格分割字符
sp=split(a," ")
if left(z,1)="第" and right(z,1)="卷" Then
if y=z then
n=" </zhengwen>" & VbCrLf & " </zhang>" & " <zhang>"& vbcrlf & sp(0) & " " & sp(1) & " " & sp(2) & " " & sp(3) & VbCrLf & " <zhengwen>"
else
n=" </zhengwen>" & VbCrLf & " </zhang>" & vbcrlf & " </juan>" & VbCrLf & " <juan>" & sp(0) & " " & sp(1) & VbCrLf & " <zhang>" & sp(2) & " " & sp(3) & VbCrLf & " <zhengwen>"
end if
y=z
else
n=a
end If
end sub [ Last edited by kcdsw on 2007-3-26 at 05:30 AM ]
附件
1: needhelp.txt (2007-3-25 11:20, 13.6 K,下载次数: 14)
|
|
2007-3-25 08:08 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
2 楼』:
VB好说,vbs没有里面的Like函数。。。麻烦啊
|
|
2007-3-25 10:47 |
|
|
jmz573515
银牌会员
积分 1212
发帖 464
注册 2006-12-13
状态 离线
|
『第
3 楼』:
如果是在记事本里可能处理起来还能方便点...
|
|
2007-3-25 10:53 |
|
|
kcdsw
中级用户
积分 404
发帖 179
注册 2006-3-30
状态 离线
|
『第
4 楼』:
呵呵 首先感谢楼上两位
也感谢所有关注这个帖子的朋友.
因为我自己不怎么懂编程.对一些高深的用法也不知道.
我自己有两种想法.
1是能够直接用word 宏来按照一定的规则来输出一个标准的xml 哪怕我再稍微手工修改一下都成, 目前这个方法还没有进入实质的阶段
2,利用word的宏,能够自动在卷章前加xml的标记
如 </zhang></juan><juan>
然后把这个文档存成txt,再手动调整一下.就基本能满足需要了.目前这个方法还在以纯手工来实现.不知道有没有其他思路.
再次谢谢 各位的关注
再次感谢
|
|
2007-3-25 11:10 |
|
|
kcdsw
中级用户
积分 404
发帖 179
注册 2006-3-30
状态 离线
|
『第
5 楼』:
Quote: | Originally posted by slore at 2007-3-25 10:47:
VB好说,vbs没有里面的Like函数。。。麻烦啊 |
|
谢谢你的回答.刚才我再次查看了word的宏,窗口的标题是micro visual basic
我不知道这里能不能满足这个函数.
兄弟能再详细的解释一下么?
|
|
2007-3-25 11:13 |
|
|
jmz573515
银牌会员
积分 1212
发帖 464
注册 2006-12-13
状态 离线
|
『第
6 楼』:
我的意思是说VBS读取WORD(处里WORD)比较麻烦,处理文本文件能好些...
|
|
2007-3-25 11:13 |
|
|
kcdsw
中级用户
积分 404
发帖 179
注册 2006-3-30
状态 离线
|
『第
7 楼』:
Quote: | Originally posted by jmz573515 at 2007-3-25 11:13:
我的意思是说VBS读取WORD(处里WORD)比较麻烦,处理文本文件能好些... |
|
谢谢
刚才没明白你的意思
这样也行.
只要能达到目的 就够了 我就是想把这些数据处理成xml
|
|
2007-3-25 11:17 |
|
|
baomaboy
银牌会员
积分 1513
发帖 554
注册 2005-12-30
状态 离线
|
『第
8 楼』:
呵呵 不懂xml这东西 所以我就只能提供编程之外的可能性了
①用EmEditor作编辑器,用录制宏的方式尽可能的把大量繁重繁多的操作录制,然后你就可以一直F4了,然后改那些无法用录制宏操作的地方。
②有一个排版方面的软件DreamEdit,如果编程无法解决的话也建议尝试下。
想当初几百个.htm的模版文件.......呵呵全靠他们了。
只是个建议,在此不一定有效^_^
|
|
2007-3-25 11:35 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
9 楼』:
result="第一卷(卷名)第一章(章名)" Like "第*卷(*)第*章(*)"
这个返回true!
所以可以判断那行包含卷名和章名,然后利用instr和mid可以截取到他们
result是false的部分那么就是正文了!
[ Last edited by slore on 2007-3-24 at 11:30 PM ]
|
|
2007-3-25 11:49 |
|
|
jmz573515
银牌会员
积分 1212
发帖 464
注册 2006-12-13
状态 离线
|
『第
10 楼』:
不知道可不可以,请在测试后使用...
on error resume next
dim n
set ws=createobject("wscript.shell")
set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("needhelp.txt",1)
do while file.atendofstream<>true
n=ltrim(file.readline)
call pd(n)
s=s & n & vbcrlf
loop
file.close
h=instr(s,"<juan>第")
jiewei=left(s,h-6):kaishi=mid(s,h-2)
set file=fso.createtextfile("out.xml")
file.write "<book>" & vbcrlf
file.write kaishi & jiewei & vbcrlf
file.write "</book>"
file.close
ws.run "notepad.exe out.xml"
sub pd(a)
l=instr(a," ")
z=left(a,l-1)
sp=split(a," ")
if left(z,1)="第" and right(z,1)="卷" then
n=" </zhengwen>" & vbcrlf & " </zhang>" & vbcrlf & " </juan>" & vbcrlf & " <juan>" & sp(0) & " " & sp(1) & vbcrlf & " <zhang>" & sp(2) & " " & sp(3) & vbcrlf & " <zhengwen>"
else
n=a
end if
end sub
|
|
2007-3-25 22:00 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
11 楼』:
word内置强大的逻辑替换工具,你可以直接将代码替换进去后另存为txt格式再改名为xml就行了
|
|
2007-3-25 22:48 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
12 楼』:
left(z,1)="第" and right(z,1)="卷"?
正文如果也满足这个条件不难吧?
|
|
2007-3-25 22:57 |
|
|
kcdsw
中级用户
积分 404
发帖 179
注册 2006-3-30
状态 离线
|
『第
13 楼』:
Quote: | Originally posted by slore at 2007-3-25 22:57:
left(z,1)="第" and right(z,1)="卷"?
正文如果也满足这个条件不难吧? |
|
是不是说正文如果有了这样的数据 会出问题?
|
|
2007-3-25 23:58 |
|
|
kcdsw
中级用户
积分 404
发帖 179
注册 2006-3-30
状态 离线
|
『第
14 楼』:
Quote: | Originally posted by jmz573515 at 2007-3-25 22:00:
不知道可不可以,请在测试后使用...
[code]
on error resume next
dim n
set ws=createobject("wscript.shell")
set fso=createobject("scripting.filesystemobject")
... |
|
非常感谢关注本帖的朋友
感谢你的代码
我这里测试了一下 成功了.
可能还有一些其他的问题,目前正在研究你的代码
问题:
卷章嵌套不正确
卷一
章一
章二
卷二
章一
章二
|
|
2007-3-26 00:00 |
|
|
kcdsw
中级用户
积分 404
发帖 179
注册 2006-3-30
状态 离线
|
『第
15 楼』:
Quote: | Originally posted by everest79 at 2007-3-25 22:48:
word内置强大的逻辑替换工具,你可以直接将代码替换进去后另存为txt格式再改名为xml就行了 |
|
我只会用简单的替换
还望赐教
|
|
2007-3-26 00:07 |
|