まず第一に、私はプログラミングのバックグラウンドではなく、VBscript はまったくの初心者です。何らかの理由で、オフィスでこのスクリプト作成タスクを実行する必要があります。Quick Test Professional 11 で使用したい。
ここでも他のフォーラムでも多くの投稿を確認しましたが、必要な情報を見つけることができませんでした。
わかりましたので、ここで私がする必要があることは次のとおりです。
2 つのテキスト ファイルを比較し、違いを 3 番目のファイルに書き込む必要があります。両方のファイルには、日付、注文番号など、いくつかのフィールドからのほぼ同じ内容が含まれています。
たとえば、ファイル 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年
日付: 1234 年 11 月 00 日
ファイル-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 is said "Expected End of STatement" between " ... 新しい 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