?
Solved

comparing two files only looping once

Posted on 2010-11-29
4
Medium Priority
?
466 Views
Last Modified: 2012-05-10
Hi, Im trying to compare two text files. Im taking the first line from file A and checking each line in file B, then trying to take the 2nd line from file A and check all lines in file B. The problem im having is that once i go through all lines in file B, i cant restart the count - my loop only goes through file B once. Is there a way in which i can set it to start reading in the file from the begining each time?
thanks
Function CheckFileDetails()

Dim fso, objFile_B, objFile_A, FileA, SavedFilesFolder, intRows 
Dim FileAContents, arrFileAContents, strLine, linecount 

'Set Variables 
linecount = 0
strFolder = "C:\Test_Auto\" 
objFile_B = "FileB.txt"
objFile_A = "FileA.txt"
 
'Create Objects 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objShell = CreateObject("Shell.Application") 
 
'Set variables
	billerFound = False

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Const intForReading = 1 
'Read in the contents of the biller master file  and new billers file
Set objFile_B = objFSO.OpenTextFile(strFolder & objFile_B, intForReading) 
Set objFile_A = objFSO.OpenTextFile(strFolder & objFile_A, intForReading) 

'Get todays date
today = Date
TodayArray = Split(today, "#", -1, 1)
today = TodayArray(0)

'Move through the new biller temp file and check if any of the activation dates are before todays date (if so check the BMF)
While Not (objFile_A.AtEndOfStream) 
Dim NewBillerArray
	strLine = objFile_A.ReadLine 
'	call SplitUpNewBillerFile(strLine)
	NewBillerArray = Split(strLine, ",", -1, 1)

'check the activation date is before or on todays date
If (NewBillerArray(0) <= today) Then

'  if NewBillerArray(0) exists in strLine
   strLineBMF = objFile_B.ReadLine

	'searching the BMF  for Long Name - if that exists, then check that entire line and compare against New Biller file
		While Not ((objFile_B.AtEndOfStream) OR (billerFound = True))
		   strLineBMF = objFile_B.ReadLine 'read in line again on next loop

	If InStr(strLineB, NewBillerArray(3)) Then

'do something


	End If
        Wend 
End If

Wend


'Close both files that we're comparing
objFile_B.Close
objFile_A.Close

End Function

Open in new window

0
Comment
Question by:DiCanio13
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 59

Expert Comment

by:Chris Bottomley
ID: 34236701
How about reading both files into arrays and then processing them completely in memory ... or at least the second file and then cycle through that array?

Chris
0
 
LVL 13

Accepted Solution

by:
themrrobert earned 1200 total points
ID: 34236713
You absolutely should compare the files in memory.


'Get todays date
today = Date
TodayArray = Split(today, "#", -1, 1)
today = TodayArray(0)

'Set variables
	billerFound = False

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Const intForReading = 1 
'Read in the contents of the biller master file  and new billers file
Set objFile_B = objFSO.OpenTextFile(strFolder & objFile_B, intForReading) 
Set objFile_A = objFSO.OpenTextFile(strFolder & objFile_A, intForReading) 
Dim strFile_A as String
Dim strFile_B as String

'Move through the new biller temp file and check if any of the activation dates are before todays date (if so check the BMF)
While Not (objFile_A.AtEndOfStream) 
	strFile_A = strFile_A & objFile_A.ReadLine & vbCrLf
Wend
While Not (objFile_B.AtEndOfStream) 
	strFile_B = strFile_B & objFile_B.ReadLine & vbCrLf
Wend
'Close both files that we're comparing
objFile_B.Close
objFile_A.Close

'Now compare with the temp 'files' which are large strings containing the entire file.

Open in new window

0
 
LVL 59

Assisted Solution

by:Chris Bottomley
Chris Bottomley earned 800 total points
ID: 34236791
Without wishing to try and edit your whole script ... the following takes a single file and creates an array for processing:

DO it twice one after the other and you will have two arrays with the data and the files closed and released before you even start data processing.

Chris
Set objFSO = CreateObject("scripting.filesystemobject")
   Set objStream =
objFSO.getfile(strFolder & objFile_B).openastextstream
   arr_B = split(objStream.ReadAll, vbcrlf)
   objstream.close
' Repeat for A
'...
	for each entity in arr_A
        	for each entity in arr_B
     	        	'Compare lines in B with Line in A
        	Next
	Next

Open in new window

0
 

Author Closing Comment

by:DiCanio13
ID: 34237032
thanks guys, great help as usual
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I met Paul Devereux (@pdevereux) today when I responded to his tweet asking “Anybody know how to automate adding files from disk to a folder in #outlook  ?”.  I replied back and told Paul that using automation, in this case scripting, to add files t…
Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
Suggested Courses
Course of the Month9 days, 1 hour left to enroll

764 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question