首先,我不是從編程背景和全新的VBscript。出於某些原因,我必須在辦公室完成這個腳本任務。 我想使用它與快速測試專業11.比較文本文件 - 使用VB編寫Igonring一些文本
我已經在這裏經歷了很多帖子以及在其他論壇,但無法找到所需的信息。
好了,所以這裏就是我需要做的:
我要比較兩個文本文件,寫在第三個文件的差異。 這兩個文件都具有幾乎相同的內容aprt從一些領域,即:日期,訂單號等。
例如,File-1有Date:00/11/1234和Order no:1111,File-2有Date:11/00/6789和Order no: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
你有什麼迄今寫的嗎? –
@ user1652222通過以隨機順序將選定部分的代碼複製並粘貼到QTP中,您創建了一個語法混亂。如果您通過我提出的(.vbs /命令行ui)步驟工作,您將獲得將解決方案整合到QTP中的知識(並瞭解預期結果文件的作用和相關性)。我會在這裏提出一個關於QTP語法錯誤的問題 –