中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 几个VBS文本操作的函数 上一主题 | 下一主题
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『楼 主』:  几个VBS文本操作的函数 使用 LLM 解释/回答一下

今天在MSDN上无意中看见文件对象有 Column 属性,以前还真不知道,
然后我自己试试,发现 Line 属性也有用,
于是利用这两个属性写了几个通用函数练练手,比我以前自己去数行列方便多了,
值得注意的是他们都是从 1 开始的,而不是 0


Const FILE_NAME = "我替春春对各位哥哥姐姐们有话说.txt"

''''''''''''''''''''''''''''''''''''''''''''''''''
' 获取指定的一行文字
'
' 参数说明:
' filespec 文件名
' line 行编号,从 1 开始
''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetLine(filespec, line)

''''''''''''''''''''''''''''''''''''''''''''''''''
' 获取指定的一列文字
'
' 参数说明:
' filespec 文件名
' column 列编号,从 1 开始
' joinStr 每列的字符用什么连接起来
' defaultStr 若某行无此列,则用此字符替代
''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetColumn(filespec, column, joinStr, defaultStr)

''''''''''''''''''''''''''''''''''''''''''''''''''
' 转换为古代中文版式(从右到左竖排)
'
' 参数说明:
' filespec 文件名
' blankStr 若原文件某行无此列,用此替代
' 它必须与一个汉字一样宽
' partition 转换后每列之间用此字符串分隔
''''''''''''''''''''''''''''''''''''''''''''''''''


   此帖被 +15 点积分         点击查看详情   
评分人:【 moniuming 分数: +15  时间:2010-2-8 23:44


附件 1: 我替春春对各位哥哥姐姐们有话说.zip (2010-2-8 16:21, 2.77 KiB,下载次数: 6)


┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛
2010-2-8 16:21
查看资料  发送邮件  发短消息  网志  OICQ (182484135)  编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

GetColumn要2重循环,感觉不如直接mid好吧。




S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-2-9 00:23
查看资料  发短消息  网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

Originally posted by slore at 2010-2-9 12:23 AM:
GetColumn要2重循环,感觉不如直接mid好吧。


一般来说的确如此,自己编码的话使用Mid会更方便。

由于二者的工作机制不同,
Column相当于高级语言中的指针的性质,而且系统会自动在换行之后将其置于初时状态的值 1,
Mid必需要读取完整的一行文字之后才能截取其中某个位置的字符,如果某行长度太长,用ReadLine则会影响效率,而如果用 Read(length) 则无法判断是否换行,同样要二重循环,而且比用Column更麻烦。

为了说明这一点,写了下面一段代码,并刻意制造了一个很长的文本(见附件 ~$tmp01$.txt),能显著的反应出结果

Set fso  = CreateObject("Scripting.FileSystemObject")

startTime = Timer
s = ""
Set f = fso.OpenTextFile("~$tmp01$.txt")
Do Until f.AtEndOfStream
char1 = ""
Do Until f.AtEndOfLine
If f.Column = 421 Then
char1 = f.Read(1)
Exit Do
End If
f.Skip 1
Loop
s = s & char1
f.SkipLine
Loop
f.Close
MsgBox "利用 Column 属性得出结果 " & s & " 耗时 " & Timer - StartTime & " 秒。"

startTime = Timer
s = ""
Set f = fso.OpenTextFile("~$tmp01$.txt")
Do Until f.AtEndOfStream
t = f.ReadLine()
s = s & Mid(t, 421, 1)
Loop
f.Close
MsgBox "利用 Mid 函数得出结果 " & s & ", 耗时 " & Timer - StartTime & " 秒。"


附件 1: ~$tmp01$.zip (2010-2-9 10:25, 5.35 KiB,下载次数: 2)


┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛
2010-2-9 10:25
查看资料  发送邮件  发短消息  网志  OICQ (182484135)  编辑帖子  回复  引用回复

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


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



论坛跳转: