TestComplete Tip: Comparing text files in VBScript

Sometimes testers face a quite common task - compare a text file generated by the tested software (e.g. a report file) with some predefined template file. Standard means for comparing files can be ineffective in this case if the generated file contains date and time stamps inside - they make comparing of such files fail even if the meaningful content of the compared files is absolutely identical.

This problem can be solved quite easy with help of regular expressions which allows isolating variable date and time stamps from comparing. VBScript has internal support of regular expressions and you can find documentation on this feature in the following MSDN article:
http://msdn.microsoft.com/library/en-us/script56/html/2380d458-3366-402b-996c-9363906a7353.asp

The script below shows how it is possible to use regular expressions to compare text files in TestComplete scripts ignoring the date/time stamps (for example: 4/25/2006 10:51:35AM).

' TestComplete VBScript
Sub Main

  fileName1 = "d:text1.txt"

  fileName2 = "d:text2.txt"

  If CompareFiles(fileName1, fileName2) Then
    Call Log.Message("The files are equal")
  Else
    Call Log.Error("The files are different")
  End If
End Sub

Function CompareFiles(fileName1, fileName2)
  Const ForReading = 1
  Const ForWriting = 2
  Const ForAppending = 8

  'Creates the FileSystemObject object
  Set fso = Sys.OleObject("Scripting.FileSystemObject")

  'Reads the first text file
  Set file1 = fso.OpenTextFile(fileName1, ForReading)

  fileText1 = file1.ReadAll

  file1.Close

  'Reads the second text file
  Set file2 = fso.OpenTextFile(fileName2, ForReading)

  fileText2 = file2.ReadAll

  file2.Close

  'Creates the regular expression object
  Set regEx = New RegExp

  'Specifies the pattern for the date/time mask
  'MM/DD/YYYY HH:MM:SSLL (for example: 4/25/2006 10:51:35AM)

  regEx.Pattern = "d{1,2}.d{1,2}.d{2,4}sd{1,2}:d{2}:d{2}w{2}"

  regEx.IgnoreCase = True

  regEx.Global = True

  'Replaces the text matching the specified date/time format with <ignore>

  newText1 = regEx.Replace(fileText1, "<ignore>")

  newText2 = regEx.Replace(fileText2, "<ignore>")

  'Compares the text
  If newText1 = newText2 Then

    CompareFiles = True
  Else

    CompareFiles = False
  End If
End Function


Close

By submitting this form, you agree to our
Terms of Use and Privacy Policy

Thanks for Subscribing

Keep an eye on your inbox for more great content.

Continue Reading

Add a little SmartBear to your life

Stay on top of your Software game with the latest developer tips, best practices and news, delivered straight to your inbox