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

问:

您好,脚本专家!我有一个包含计算机名称列表的文本文件。如何按照字母顺序对该文件进行排序?

-- 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 的内容按照字母顺序进行的排序。

时间: 2024-09-20 13:52:43

用vbs对文本文件的内容进行排序_vbs的相关文章

vbs删除文本文件的行的函数_vbs

Delete Line Function 复制代码 代码如下: Function DeleteLine(strFile, strKey, LineNumber, CheckCase) 'DeleteLine Function by TomRiddle 2008 'Remove line(s) containing text (strKey) from text file (strFile) 'or 'Remove line number from text file (strFile) 'or

将文本文件的内容或者文字保存成图片的方法介绍

 这篇文章主要介绍了将文本文件的内容或者文字保存成图片的方法,需要的朋友可以参考下 调用方法: 代码如下: ConvertTextFileToImage(Server.MapPath("~/Log.txt"),Server.MapPath("~/Log.png"));     实现代码:  代码如下: void ConvertTextFileToImage(String textFile,String imageFile) { System.Drawing.Font

ajax返回的json内容进行排序使用sort()方法实现

关于ajax返回的json内容进行排序,主要使用sort()对数组的元素进行排序,具体实现如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助   关键方法:sort()用于对数组的元素进行排序. return a.num-b.num是升序: return b.num-a.num;是降序 writeln在输出后面加n,在文档里是换行,在html里是解释称空格. 复制代码 代码如下: $.post("json.json",function(data){ data.sort(function

显示文本文件的内容

  如果需要显示文本文件的内容,可以使用type命令. 语法: type [drive:][path] filename 参数: [drive:][path] filename 指定要查看的一个或多个文件的位置和名称.用空格分开多个文件名. 举例: 1.显示holiday.txt文件的内容 type holiday.txt 2.每次显示一屏长文件的内容 type holiday.txt丨more

.NET中如何将文本文件的内容存储到DataSet_实用技巧

前言 项目中对文本文件的操作比较简单,但是如果需要将文本文件的内容写入系统的缓存中,操作起来,会稍微的繁琐一些.现在总结一个较为通用的方法,将文本文件的内容缓存进入DataSet数据集中.下面话不多说了,我们直接来看示例代码吧. 示例代码 private DataSet _iifSet; /// <summary> /// 将文本文件转化为DataSet /// </summary> /// <param name="filePath"></p

Python 文本文件的内容读入操作

python 将文本文件的内容读入可以操作的字符串变量非常容易.文件对象提供了三个"读"方法: .read()..readline() 和 .readlines().每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量. .read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中.然而 .read() 生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理 打开文件 print "

使用PHP程序直接调用文本文件的内容实例

  如何用php直接调用文本文件内容:首先通过file函数打开服务器上的一个文本文件,返回的$myFile 就将成为这个文件操作的句柄,然后再通过循环指令,取出文件中每一行的内容并打印出来. 编程思路 首先要使用的函数为fi1e,本函数与 readfile() 类似,不同的地方为 file 函数将文件中的内容全部读出,并输出到数组的变量中.每行都是单独的数组元素.使用 file 函数打开一个 data.txt 的文件,data.txt 文件的内容为: 第一行1 第二行2 第三行3 打开文件的语句

用vbs实现对文本文件中的项计数_vbs

问: 嗨,脚本专家!如何向文本文件的顶部添加行? -- FT 答: 您好,FT.您知道,在亚瑟·柯南·道尔爵士生涯的某一时刻,他实际上将夏洛克·福尔摩斯写死了,他认为他已写完了有关这个大侦探所有能写的一切.公众的疾呼很快改变了他的想法,他迅速地使夏洛克·福尔摩斯起死回生.(按照所有肥皂剧的那种基本情节主线一路创作下来.) 我们脚本专家对亚瑟·柯南·道尔爵士深感同情.毕竟,我们会周期性地想,"好了,到这里吧:我们已编写了有关文本文件所有能编写的一切."我们刚有此想法,就立刻收到有关文本文

Excel如何对表格内容自定义排序

  1.我们现在Excel中打开一篇工作表,点击功能区的"开始"选项卡,在"编辑"区域选择"排序和筛选"的图标.然后点击它的倒三角按钮,在弹出的下拉菜单中选择"自定义排序"命令; 2.接着窗口会弹出一个"排序"的对话框,在点击"列"下面的"主要关键字"的下拉按钮进行选择,在"排序依据"下面的下拉按钮选择"数值","次序