text - 使用 VBScript 在文本文件中查找特定字符串

标签 text vbscript substring

我需要在txt文件中找到字符串“Test Case”和索引。

我给你一个你可以在这个文件中找到的行的例子:

<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr>
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr>

正如您在第二行中看到的那样,我出现了字符串“Test Case”。

我想要做的是在出现“Test Case 5”的那一行之前的那一行中添加另一个特定的字符串。例如:
<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr>
<tr><td><a href="../../Logs/DD/Beginning_of_DD_TC5.html">Beginning_of_DD_TC5</a></td></tr>
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr>

同样重要的是,我添加的行有一个索引 i 取决于测试用例编号,我需要在第一次出现“测试用例”之前添加它 & i,我不关心以下出现的情况。

我测试了 InStr 函数是否与示例一起工作:
Dim objFSO, filepath, objInputFile, tmpStr, substrToFind
Set objFSO = CreateObject("Scripting.FileSystemObject")
filepath = "C:\VBS\filediprova.txt"
substrToFind = "<tr><td><a href=" & chr(34) & "../Test case 5"
Set objInputFile = objFSO.OpenTextFile(filepath)
tmpStr = objInputFile.ReadLine
If InStr(tmpStr, substrToFind) <= 0 Then
   WScript.Echo "No matches"
Else
   WScript.Echo "Found match"
End If

它可以工作,它可以识别我的子字符串。在这个小例子中,txt 文件只包含以下行:
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr>

现在,当我尝试遍历包含更多行的文件时,我遇到了一些问题,我使用了相同的 InStr 函数。
我写了以下循环:
Do until objInputFile.AtEndOfStream
   strToAdd = "<tr><td><a href=" & chr(34) & "../../Logs/DD/Beginning_of_DD_TC" & CStr(index) & ".html" & chr(34) & ">Beginning_of_DD_TC" & CStr(index) & "</a></td></tr>"
   substrToFind = "<tr><td><a href=" & chr(34) & "../Test case " & index
   firstStr = "<?xml version" 'my file always starts like this
   tmpStr = objInputFile.ReadLine
   If InStr(tmpStr, substrToFind) <= 0 Then
       If Instr(tmpStr, firstStr) > 0 Then
          text = tmpStr 'to avoid the first empty line
       Else
          text = text & vbCrLf & tmpStr
       End If
   Else
      text = text & vbCrLf & strToAdd & vbCrLf & tmpStr
      index = index + 1
   End If
Loop

怎么了?

最佳答案

我建议为此使用正则表达式而不是字符串操作:

Set fso = CreateObject("Scripting.FileSystemObject")

filename = "C:\VBS\filediprova.txt"

newtext = vbLf & "<tr><td><a href=""..."">Beginning_of_DD_TC5</a></td></tr>"

Set re = New RegExp
re.Pattern = "(\n.*?Test Case \d)"
re.Global  = False
re.IgnoreCase = True

text = f.OpenTextFile(filename).ReadAll
f.OpenTextFile(filename, 2).Write re.Replace(text, newText & "$1")

正则表达式将匹配一个换行符( \n )后跟包含字符串 Test Case 的行后跟一个数字( \d ),替换将在该数字前面加上您要插入的文本(变量 newtext )。设置 re.Global = False使替换在第一场比赛后停止。

如果文本文件中的换行符编码为 CR-LF (回车+换行)你必须改变\n进入 \r\nvbLf进入 vbCrLf .

如果您必须修改多个文本文件,您可以在这样的循环中进行:
For Each f In fso.GetFolder("C:\VBS").Files
  If LCase(fso.GetExtensionName(f.Name)) = "txt" Then
    text = f.OpenAsTextStream.ReadAll
    f.OpenAsTextStream(2).Write re.Replace(text, newText & "$1")
  End If
Next

关于text - 使用 VBScript 在文本文件中查找特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751301/

相关文章:

c# - 如何以编程方式确定我的处理器类型?

mysql - 无法使用vbscript连接到Mysql

python - 查找包含另一个列表中的子字符串的列表元素的有效方法

mysql - 如何告诉 MYSQL 从后面开始修剪 X 个字符?

C - 查找句子中最长的单词

Java将多行字符串保存到文本文件

excel - 如何使用 VBScript 判断 Excel 2007 电子表格是否打开以及是谁打开的

java - 以最快的方式找到所有可能的子字符串

安卓 : Find best size for Text based on size of Button

machine-learning - 对 DSSM 中的单词哈希感到困惑?