首先,我不是编程背景,对 VBscript 完全陌生。由于某些原因,我必须在办公室执行此脚本任务。我想将它与 Quick Test Professional 11 一起使用。
我在这里以及其他论坛上浏览了许多帖子,但无法找到所需的信息。
好的,这就是我需要做的:
我必须比较两个文本文件并将差异写入第三个文件。这两个文件在某些字段中具有几乎相同的内容,即:日期、订单号等。
例如,文件 1 的日期:00/11/1234 和订单号:1111 和文件 2 的日期:11/00/6789 和订单号:2222 那么有什么方法可以忽略这些字段及其值? 有什么方法可以创建我可以添加的忽略列表,在比较过程中将使用它并在比较过程中跳过这些字段?所以我的差异文件不会有这些差异,因为这些值总是不同的。所以我可以在我的结果文件中得到所有其他的差异。
供您参考,这里是示例文件。
到目前为止,我已经比较了这两个文件,但以最简单的方式,我不知道如何忽略这些字段。我想将这些任务作为一个函数,以便我可以在我的函数库中使用它。
文件-1
日期:00/11/1234 / 订单号:1111
价格 1:1111.00 美元
价格 2:2222.00 美元
价格 3:1234.00 美元
ABC def GHI kjl 1111
订单号:1111
期限:2年
日期:00/11/1234
文件-2
日期:11/00/6789 和订单号:2222
价格 1:1111.00 美元
价格 2:2222.00 美元
价格 3:5678.00 美元
ABC def GHI kjl 1111
订单号:2222
期限:3年
日期:11/00/6789
结果文件应显示:
差异:
文件 1 第 4 行:价格 3:$1234.00
文件 2 第 4 行:价格 3:$5678.00
文件 1 第 7 行:期限:2 年
文件 2 第 7 行:期限:3 年
非常感谢您提前。
嗨@Ekkehard.Horner 非常感谢您的帮助和时间以及容忍我愚蠢的问题。事实是,我越是试图理解你的代码,我就越感到困惑。当我将以下代码放入 Quick Test Pro_11 中时,它会抛出语法错误 @“Dim oDiffer : Set oDiffer = New cDiffer.init("C:......" QTP 说“预期语句结束”在“ ...新的 cDiffer" 和 ".init" QTP 在函数 "TrailVersion" 和函数 "GoldVersion" 中都显示了错误
如果您对此有所了解,那就太好了。是否有必要拥有“预期的”文本文件......?因为我不想包含该部分,否则我必须为每次比较创建“预期”文件。
请原谅我愚蠢的问题。
提前致谢。
Class cDiffer
Option Explicit
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
WScript.Quit TrialVersion()
WScript.Quit TinVersion()
Function TinVersion()
WScript.Echo "can't compare files yet."
TinVersion = 1
End Function ' TinVersion
HERE I'VE COMMENTED TRIALVERSION FUNCTION
Function TrialVersion()
Dim oDiffer : Set oDiffer = New cDiffer.init("C:\Documents and Settings\24800\My Documents\PDF comparison\A_30120625003267.TXT", "C:\Documents and Settings\aa24800\My Documents\PDFcomparison\B_30120502002776.TXT", Array("Quote ID:", "Quote Summary for:", "Quote Date:", "Tracking ID (A):", "Tracking ID (Z):", "Tracking ID:")
' the differ should be able to return a result - the differences
Dim sRes : sRes = oDiffer.diffs()
' check actual vs. expected result
Dim sExp : sExp = goFS.OpenTextFile("Expected").ReadAll()
WScript.Echo "--------- Res"
WScript.Echo sRes
If sExp = sRes Then
WScript.Echo "ok"
' save result
goFS.CreateTextFile("C:\Documents and Settings\aa24800\My Documents\PDF comparison\Result.TXT", True).Write sRes
TrialVersion = 0 Else
' show failure
WScript.Echo "--------- Exp"
WScript.Echo sExp
WScript.Echo "not ok"
TrialVersion = 1
End If
End Function ' TrialVersion
'trivial Differ
'Class cDiffer
Dim m_sLFSpec : m_sLFSpec = "C:\Documents and Settings\aa24800\My Documents\PDF comparison\A_30120625003267.TXT"
Dim m_sRFSpec : m_sRFSpec = "C:\Documents and Settings\aa24800\My Documents\PDF comparison\B_30120502002776.TXT"
' "constructor" with params
Public Function init(sLFSpec, sRFSpec)
Set init = Me
m_sLFSpec = sLFSpec
m_sRFSpec = sRFSpec
End Function
Public Function diffs()
diffs = "cDiffer.diffs() not implemented yet."
End Function ' diffs
'End Class ' cDiffer00
'gold Differ
'Class cDiffer
' Private m_sLFSpec ' file specs
' Private m_sRFSpec
Private m_sLFiNa ' file names
Private m_sRFiNa
Private m_dicLabels ' store and efficiently find selective labels
' "constructor" with params
Public Function init(sLFSpec, sRFSpec, aLabels)
Set init = Me
m_sLFSpec = sLFSpec
m_sRFSpec = sRFSpec
m_sLFiNa = goFS.GetBaseName(sLFSpec)
m_sRFiNa = goFS.GetBaseName(sRFSpec)
Set m_dicLabels = CreateObject("Scripting.Dictionary")
m_dicLabels.CompareMode = vbTextCompare ' case-insensitive
Dim sKey
For Each sKey In aLabels
m_dicLabels(sKey) = 0
Next
End Function
Public Function diffs() ' Use ArrayList to collect the results
Dim alRes : Set alRes = CreateObject("System.Collections.ArrayList")
' requested title
alRes.Add "Differences:"
' open both input files
Dim tsL : Set tsL = goFS.OpenTextFile(m_sLFSpec)
Dim tsR : Set tsR = goFS.OpenTextFile(m_sRFSpec)
' loop over lines
Do Until tsL.AtEndOfStream
Dim sLL : sLL = tsL.ReadLine()
Dim sRL
' second file could be shorter
If tsR.AtEndOfStream Then
alRes.Add "tsR.AtEndOfStream"
Exit Do
Else
sRL = tsR.ReadLine()
End If
' no need for work if lines are equal
If sLL <> sRL Then
If m_dicLabels.Exists(Split(sLL, ":")(0))Then
Dim sLiNo : sLiNo = CStr(tsL.Line - 1)& ":"
alRes.Add Join(Array(m_sLFiNa, "Line", sLiNo, sLL))
alRes.Add Join(Array(m_sRFiNa, "Line", sLiNo, sRL))
End If
End If
Loop
tsL.Close
tsR.Close
diffs = Join(alRes.ToArray(), vbCrLf) & vbCrLf
End Function ' diffs
End Class ' cDiffer
Function GoldVersion()
' the differ should know about the files to compare
' and the info labels to select
Dim oDiffer : Set oDiffer = New cDiffer.init("C:\Documents and Settings\aa24800\My Documents\PDF comparison\A_30120625003267.TXT", "C:\Documents and Settings\aa24800\My Documents\PDF comparison\B_30120502002776.TXT", Array("Quote ID:", "Quote Summary for:", "Quote Date:", "Tracking ID (A):", "Tracking ID (Z):", "Tracking ID:")
' the differ should be able to return a result - the differences
Dim sRes : sRes = oDiffer.diffs()
' check actual vs. expected result
Dim sExp : sExp = goFS.OpenTextFile("Expected").ReadAll()
WScript.Echo "--------- Res"
WScript.Echo sRes
If sExp = sRes Then
WScript.Echo "ok"
' save result
goFS.CreateTextFile("C:\Documents and Settings\aa24800\My Documents\PDF comparison\Result.TXT", True).Write sRes
GoldVersion = 0 Else
' show failure
WScript.Echo "--------- Exp"
WScript.Echo sExp
WScript.Echo "not ok"
GoldVersion = 1
End If
End Function ' GoldVersion