用vbscript实现在文本文件中搜索两个项

问:
您好,脚本专家! 您曾经介绍过如何在文本文件中搜索单个词或短语,但如何在文本文件中搜索两个短语呢? 我想知道文件中是否包含 Windows 2000 或 Windows XP。
-- JR
答:
您好,JR。您知道,让脚本专家去做一件事情就已经够困难的了;可见让他们去做两件事情几乎是不可能的。 但我们要告诉您的是: 只要您不介意我们向您介绍一种简单的方法来在文本文件中搜索多个项,我们就会向您介绍如何在文本文件中搜索多个项。
注意。 为什么称之为“简单的方法”呢? 我们不打算费神设置数组或其他某个复杂的框架来进行多个搜索。 相反,我们打算在第一次搜索文件时搜索第一个术语,而后在第二次搜索文件时搜索第二个术语。 这种方法虽不是很好,但却很简单,且很有效。
以下是一小段简单的脚本,它可告诉您是否可在文本文件 C:\Scripts\Text.txt 中找到术语 Windows 2000 或 Windows XP:


代码如下:

Const ForReading = 1 
blnFound = False 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.txt", ForReading) 
strContents = objFile.ReadAll 
objFile.Close 
If InStr(strContents, "Windows 2000") Then 
    blnFound = True 
End If 
If InStr(strContents, "Windows XP") Then 
    blnFound = True 
End If 
If blnFound Then 
    Wscript.Echo "Either Windows 2000 or Windows XP appears in this file." 
Else 
    Wscript.Echo "Neither Windows 2000 nor Windows XP appears in this file." 
End If

此脚本开头定义了一个名为 ForReading 的常量,并将其值设定为 1;打开文本文件时我们将用到它。 我们还创建了一个名为 blnFound 的变量,并将其值指定为 False;我们将使用此变量来跟踪是否在文件中找到了任意一个搜索术语。 如果至少找到了一个术语,我们就将 blnFound 的值改为 True;否则,该值将保持 False 不变。
接下来我们打开文件 C:\Scripts\Test.txt 进行读取,然后使用 ReadAll 方法将该文件的所有内容读入名为 strContents 的变量中;实际上我们将对存储于内存中的此文件“副本”进行搜索。 由于我们不再需要此物理文件,因此我们调用 Close 方法将该文件关闭。
此时,我们可进行第一次搜索了。 下面这行代码使用 InStr 函数来确定是否可在变量 strContents 中的某个位置找到字符串 Windows 2000:
If InStr(strContents, "Windows 2000") Then
如果 InStr 为 True,则我们将 blnFound 的值设置为 True;如果 InStr 为 False,我们将直接跳至下一个搜索。 在下一个搜索中,我们重复此过程,这次将搜索字符串 Windows XP:
If InStr(strContents, "Windows XP") Then
如果找到了 Windows 2000 或 Windows XP(或二者均找到了),则 blnFound 将为 True;如果两者均未找到,则 blnFound 将仍为 False。 在脚本的末尾,我们检查 blnFound 的值,并指出是否在文件中找到了一个或多个搜索短语。
但如果您想知道文件中是否同时包含这两个搜索短语,该怎么办呢? 我们将不再对此做详细阐述,但下面的脚本可告诉您是否可在文件中同时找到两个目标短语:
Const ForReading = 1
intFound = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.txt", ForReading)
strContents = objFile.ReadAll
objFile.Close
If InStr(strContents, "Windows 2000") Then
    intFound = intFound + 1
End If
If InStr(strContents, "Windows XP") Then
    intFound = intFound + 1
End If
If intFound = 2 Then
    Wscript.Echo "The text file contains both Windows 2000 and Windows XP."
Else
    Wscript.Echo "The text file does not contain both Windows 2000 and Windows XP."
End If
是的,该脚本的确与前面的脚本很相似。 最大的不同之处在于我们没有使用 True-False 变量;而是使用了一个名为 intFound 的计数器变量。 该脚本首先搜索 Windows 2000;如果找到了该短语,则会将 intFound 加 1。(由于 intFound 开始时为 0,这就意味着此时 intFound 将等于 1。) 
然后该脚本将搜索 Windows XP,如果找到了该短语,会将 intFound 的值加 1。最终结果如何呢? 在脚本末尾,只有同时找到了两个目标短语,intFound 才会等于 2;如果 intFound 等于 0 或 1,则表示一个都没找到或只找到了一个目标短语。 此时所要做的就是回显搜索结果。

(0)

相关推荐

  • 用vbscript实现在文本文件中搜索两个项

    问: 您好,脚本专家! 您曾经介绍过如何在文本文件中搜索单个词或短语,但如何在文本文件中搜索两个短语呢? 我想知道文件中是否包含 Windows 2000 或 Windows XP. -- JR 答: 您好,JR.您知道,让脚本专家去做一件事情就已经够困难的了:可见让他们去做两件事情几乎是不可能的. 但我们要告诉您的是: 只要您不介意我们向您介绍一种简单的方法来在文本文件中搜索多个项,我们就会向您介绍如何在文本文件中搜索多个项. 注意. 为什么称之为"简单的方法"呢? 我们不打算费神设

  • 用vbscript实现从文本文件中删除所有重复行的代码

    问: 您好,脚本专家!如何从文本文件中删除所有重复行? -- SW 答: 您好,SW.您知道,成为一名脚本专家便意味着开始永无止境地寻找给定问题的最终解决方案.(或者至少在我们的经理问为什么我们似乎从未真正完成什么时,我们是这么告诉他的:"老板,永无止境的寻找过程需要时间!")这就是为什么我们很高兴看到您的问题的原因.不久前 我们回答了一个关于从文本文件中删除重复名字的类似问题.我们想到的解决方案十分简单而且效果不错:只是我们不确定那是最佳解决方案.现在,很感谢您的问题,我们可以再次尝

  • Python中搜索和替换文件中的文本的实现(四种)

    在本文中,我将给大家演示如何在 python 中使用四种方法替换文件中的文本. 方法一:不使用任何外部模块搜索和替换文本 让我们看看如何在文本文件中搜索和替换文本.首先,我们创建一个文本文件,我们要在其中搜索和替换文本.将此文件设为 Haiyong.txt,内容如下: 要替换文件中的文本,我们将使用 open() 函数以只读方式打开文件.然后我们将 t=read 并使用 read() 和 replace() 函数替换文本文件中的内容. 语法: open(file, mode='r') 参数: f

  • Java读写文件,在文件中搜索内容,并输出含有该内容的所有行方式

    1.问题描述 在一个目录及子目录下查找 TXT或Java文件,从中搜索所有"对象"字样的行. 在D盘中的所有文件中搜索含有"对象"的行. 2.解题思路 先找出D盘下所有文件 再对每个文件中的每行内容进行,进行查找,若含有"对象"两字,输出该行. 3.程序代码 import java.io.File; import java.io.IOException; import java.util.Scanner; public class B { sta

  • Android中比较两个图片是否一致的问题

    在Fragment界面中,设置两个图片一致如下: 默认设置图片为: binding.ivArrow.setImageResource(R.drawable.icon_down); 先获取默认图片,再和其它两张图片做对比,然后处理业务逻辑: Drawable.ConstantState ivArrow = binding.ivArrow.getDrawable().getCurrent().getConstantState(); Drawable.ConstantState icon_up = g

  • Java基础之删除文本文件中特定行的内容

    一.问题的产生 基于I/O流编写的图书馆管理系统 在最近使用I/O流写图书馆管理系统中管理员对图书和用户的管理操作时,遇到了需要删除特定图书和用户的操作,在查询资料和询问老师后得知I/O流中没有可以直接删除单独行的方法. 二.解决思路 同时也为我提供了新的思路:将整个文件中的全部内容读取出来,然后通过集合将每一行单独存放,通过查找到集合内特定的内容后,将该行内容删除,此时list集合会自动将后面的内容填补上来,再重新写入的时候不会出现空行的情况.这时再重新遍历一次该集合,将现在的集合内容写入文件

  • C++实现LeetCode(33.在旋转有序数组中搜索)

    [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). You are given a target value to search. If f

  • C++实现LeetCode(81.在旋转有序数组中搜索之二)

    [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索之二 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,0,1,2,2,5,6] might become [2,5,6,0,0,1,2]). You are given a target value to search.

  • C++ Dijkstra算法之求图中任意两顶点的最短路径

    Dijkstra算法是图中找任意两点中最短路径的一种经典算法. 重点的步骤总结如下: 1.算法采用了并查集 (之后都叫它为 最短路径顶点集 ):即每次都找离开始顶点距离最短的顶点,然后把该顶点加入最短路径顶点集中(已经加入最短路径顶点集里的那些顶点 下一次就会跳过它了,并且,在顶点集里 任意两个顶点间的距离 都已经是最短) 2.用来记录从源点(开始顶点) 到vi (0<=i<=numVertices) 的最短距离 的数组dist[numVertices] ,并且这个数组的元素值是会不断变化的,

  • nginx中的两个模块的proxy_pass的区别解析

    1.ngx_stream_proxy_module模块的proxy_pass指令 只能在server段使用使用, 只需要提供域名或ip地址和端口. 可以理解为端口转发,可以是tcp端口,也可以是udp端口. server { listen 127.0.0.1:12345; proxy_pass 127.0.0.1:8080; } server { listen 12345; proxy_connect_timeout 1s; proxy_timeout 1m; proxy_pass exampl

随机推荐