• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >vbs > 用vbs对文本文件的内容进行排序

用vbs对文本文件的内容进行排序

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了vbs读取文本内容,vbs 打开文本文件,vbs读取文本 指定,vbs读取文本,vbs输出文本等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问:
您好,脚本专家!我有一个包含计算机名称列表的文本文件。如何按照字母顺序对该文件进行排序?
-- LR
答:
您好,LR。如果想偷懒的话,我们就会告诉您:“对不起,您不能这样做。”我们也可以就此脱身,因为 Microsoft 的脚本编写技术中没有一个方法能在打开文本文件后对文件进行排序。不过,嗨,“脚本专家”什么时候偷过懒呢?
噢,对了,我们是偷过几次懒,不过希望所有的人都已经忘了。不过,这次我们将向您提供一个解决办法。
虽然没有能直接对文本文件进行排序的方法,但我们可以通过执行以下操作最终达到相同的效果:1) 使用 FileSystemObject 将文件读取到内存中;2) 在内存中按照字母顺序对文件进行排序;3) 使用内存中的已排序的数据替换文件现有的内容。这些操作虽然有点儿绕弯儿,但是您最后将得到一个已按照字母顺序进行排序的文本文件,而这正是您想要的结果。
为了完成此任务,我们选择使用一个断开连接的记录集。还有其他的方法能够实现此目的(比如说,冒泡排序),但是断开连接的记录集能提供更多的灵活性,且更易于讲解,尤其适合于那些曾有过数据库编程经验的用户。我们在此将向您简要介绍断开连接的记录集;若要获得有关其工作原理的详细说明,您可能需要访问 Scripting Week 2 网络广播 Things the Scripting Guys Never Told You(脚本专家从未告诉过您的事情)。(作为额外提供的补充信息,该网络广播还将向您说明如何使用冒泡排序对单个文件数据进行排序。)
在开始之前,我们假定您有一个与以下内容类似的文本文件,文件的每一行都有一个计算机名称:
red-ws-02
atl-ws-01
sf-ws-02
atl-ws-02
atl-ws-03
red-ws-02
sf-ws-01

如何读取这些计算机名称、对它们进行排序并接着将排序后的列表写回该文本文件呢?我们可以使用一个与以下内容类似的脚本:
Const adVarChar = 200
Const MaxCharacters = 255
Const ForReading = 1
Const ForWriting = 2

Set DataList = CreateObject("ADOR.Recordset")
DataList.Fields.Append "ComputerName", adVarChar, MaxCharacters
DataList.Open

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Scripts\Computers.txt", ForReading)

Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
    DataList.AddNew
    DataList("ComputerName") = strLine
    DataList.Update
Loop

objFile.Close

DataList.Sort = "ComputerName"

DataList.MoveFirst
Do Until DataList.EOF
    strText = strText & DataList.Fields.Item("ComputerName") & vbCrLf
    DataList.MoveNext
Loop

Set objFile = objFSO.OpenTextFile("C:\Scripts\Computers.txt", ForWriting)

objFile.WriteLine strText
objFile.Close

首先,我们定义要创建断开连接的记录集所需要的一系列常量。(应将断开连接的记录集视为一个只存在于内存中的、与储存在磁盘驱动器上的物理数据库无关的数据库。)然后,我们使用以下这组代码来创建一个由单个字段“ComputerName”组成的断开连接的记录集:
Set DataList = CreateObject("ADOR.Recordset")
DataList.Fields.Append "ComputerName", adVarChar, MaxCharacters
DataList.Open

接下来,我们使用 FileSystemObject 来打开文本文件 C:\Scripts\Computers.txt。此时,我们准备开始对所创建的记录集进行填充。我们要执行的操作就是逐行读取该文本文件。每读取一行,我们都将使用“AddNew”方法向记录集添加一条新记录。我们将 ComputerName 字段的值设置为我们刚才在该文本文件中读取的行(请记住,该文本文件的各行分别表示一个计算机名称),然后使用“Update”方法将记录保存到该记录集。继续执行此操作,直至我们读取完该文本文件的每一行为止,然后我们将关闭该文件。 
是的,这听起来好像工作量很大,但是正如您看到的,所有的操作只需以下几行代码:
Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
    DataList.AddNew
    DataList("ComputerName") = strLine
    DataList.Update
Loop

objFile.Close

接下来,我们需要对记录集进行排序。这是使用断开连接的记录集而不使用冒泡排序或其他手动排序算法的主要好处之一。对记录集进行排序只需执行一行代码:
DataList.Sort = "ComputerName"

现在我们就有了一个已排序的记录集,需要使用该记录集将数据写回文本文件。实现此目的最简单的方法就是遍历此记录集、抓取每条记录并将整个记录集保存在一个变量中。这就是下面所执行的操作:
DataList.MoveFirst
Do Until DataList.EOF
    strText = strText & DataList.Fields.Item("ComputerName") & vbCrLf
    DataList.MoveNext
Loop

我们只是看一看各行记录,然后将 ComputerName 字段的值存储在变量 strText 中。请注意我们是如何执行此操作的:我们将 strText 的值设置为 strText 中的任何值加上当前 ComputerName 字段的值,再加上一个回车换行符(这正是 vbCrLf 常量所表示的)。我们将使用内存中的一个名为 strText 的变量来结束此操作,该变量包含以下数据:
atl-ws-01
atl-ws-02
atl-ws-03
red-ws-02
red-ws-02
sf-ws-01
sf-ws-02

最后,重新打开该文本文件(这次是为了写入)并使用“WriteLine”方法将现有的内容替换为 strText 的值。因为 strText 的值就是已排序的计算机名称列表,所以我们就完成了对 C:\Scripts\Computers.txt 的内容按照字母顺序进行的排序。 </div>

您可能想查找下面的文章:

  • vbs 自动复制U盘的内容
  • 用vbs实现读取文本文件的方法
  • 用vbs对文本文件的内容进行排序
  • 用vbs读取远程计算机上的文本文件的代码
  • 用vbs将输出内容写到屏幕以覆盖当前屏幕上的内容的方法

相关文章

  • VBS教程:属性-FreeSpace 属性
  • 一个实现VBS倒计时的代码
  • Vbs 脚本编程简明教程之一
  • VBS教程:函数-InStrRev 函数
  • vbs实现的下拉框对应键入值
  • 使用SAFEARRAY返回的代码
  • VBS教程:VBScript 语句-Property Let 语句
  • vbs中将GB2312转Unicode的代码
  • VBS 修改远程桌面端口号的代码
  • VBS教程:函数-IsNumeric 函数

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • VBScript提交表单提示-对象不支持此属性或方法
    • VBS教程:函数-Filter 函数
    • VBS教程:函数-Sqr 函数
    • e是自然对数的底 e.vbs
    • 用VBS模拟二叉树,可以得到一个排序办法.
    • 防止网页脚本病毒执行的方法-from web
    • VBS编程教程 (第1篇)
    • 用vbs分割与合并文本文件的代码
    • VBS编程教程 (第2篇)
    • VBS教程:属性-Drive 属性

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有