Highlight Differenct character in 2 text files

Posted on 2006-11-13
Last Modified: 2012-05-05
I have file A contain number from 1 2 3 4 5 6 7 8
I have file B contain number from 2 4 6 8
I need to develop program in vb to generate third file C containging only the differece Between A and B Like (1 3 5 7)

I did the following but now working ... anybody can help please?
Private Sub ReadandMatch_Click()
        'Read The Source File
        ff1 = FreeFile
        Open Text1.Text For Binary Access Read Lock Read Write As #ff1
        s1 = Space$(LOF(ff1))
        Get #ff1, , s1
        Arr1 = Split(s1, vbCrLf)
        Close ff1
        'Read The Profile File
        ff2 = FreeFile
        Open Text2.Text For Binary Access Read Lock Read Write As #ff2 ' if any error change it to #ff1
        s2 = Space$(LOF(ff2))
        Get #ff2, , s2
        Arr2 = Split(s2, vbCrLf)
        Close ff2
         ' Write to output file
        ff7 = FreeFile 'Text file format
        Open Text5.Text & ".txt" For Output As #ff7
        ff8 = FreeFile
        Open Text7.Text & ".txt" For Output As #ff8
        For O = 0 To UBound(Arr1)
            For P = 0 To UBound(Arr2)
                If Trim(Arr1(O)) = Trim(Arr2(P)) Then
                    Print #ff7, Trim(Arr1(O))
                    Exit For ' if match exit from the second loop
                ElseIf Trim(Arr1(O)) <> Trim(Arr2(P)) Then
                     Print #ff8, Trim(Arr1(O))  
                    Exit For
                End If
      Close ff7
      Close ff8
End Sub
Question by:haiderms
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
  • 3
  • 2
LVL 35

Accepted Solution

Raynard7 earned 250 total points
ID: 17936517
If you include the microsoft scripting runtime as a reference,
below should read in both of your files, then output any lines that are in one but are not in the other.

public sub readFiles()
dim dic1 as dictionary
dim dic2 as dictionary

set dic1 = getData("C:\temp\file1.txt")
set dic2 = getData("C:\temp\file1.txt")
outputDifferences(dic1, dic2)
end sub

public sub outputDifferences(dic1 as dictionary, dic2 as dictionary)
dim fileName as string
dim fileNo as integer
fileNAme = "C:\temp\diff.txt"
fileNo = freefile
dim x as variant
open filename for output as #fileno
for each x in dic1.keys
     if dic2.exists(x) = false then
        print #fileno, x
    end if
next x

for each x in dic2.keys
     if dic1.exists(x) = false then
        print #fileno, x
    end if
next x

close #fileno
end sub

public function getData(fileName as string) as dictionary
dim dicNew as new dictionary
dim fileNo as integer
dim strData as string
dim x as Variant

fileNo = freefile
open filename for binary access read lock read write as #fileNo
strData = Space$(LOF(fileNo))
Get #fileNo,,strData
   x = Split(strData, vbcrlf)
    For i = 0 To UBound(x)
        strData = x(i)
       if dicNew.exists(strData)
          dicNew(strData) = dicNew(strData) + 1
          dicNew.add strData, 1
       end if
    Next i

getData = dicNew
end function

Author Comment

ID: 17936594
sorry I think you miss understand me ... I don't it using VB6

My script working ok but result only
in file only 1,3

my problem I can't move from one array to the next array.
the problem on star mark line I need to know how can I do that ?
because if the condition match cursor should move to next line to compare with.

For O = 0 To UBound(Arr1)
            For P = 0 To UBound(Arr2)
                If Trim(Arr1(O)) = Trim(Arr2(P)) Then
                    Print #ff7, Trim(Arr1(O))
                    Arr2(P) = Arr2(P) + 1   *********************************************(this is the problem)
                    Exit For ' if match exit from the second loop
                ElseIf Trim(Arr1(O)) <> Trim(Arr2(P)) Then

                     Print #ff8, Trim(Arr1(O))    
                    Exit For

                End If

LVL 35

Expert Comment

ID: 17936611
what are you doing it with?

also - what are you trying to acheive with Arr2(P) = Arr2(P) + 1  ??

Author Comment

ID: 17936859

I am really sorry ... I mean I am doing this application using VB6.
Now This application should read to files and generate one file containg the difference lines not available on the second file.

Ar2 defined as long

what am tring to do is to move from one location in the array to anather
from example
First location in the array contain value of 2
Second location in the array contain value of 4
The third location in the array contain value of 6

my problem in the previous application is after matching the firs to lines in each file when find it math I should move to the second line on the second file to compare it
That why I add this statment
Arr2(P) = Arr2(P + 1)

so next time the for loop will take the value in the new location not same location.

LVL 35

Expert Comment

ID: 17937038
The above that I posted will work in vb6

if you must do it with arrays, I would do a foreach each way, ie go through the first file then for each record then loop through the other array - if the value is not found then print it out.

I would then reverse it the other way - for each record in file2 check each value in file1 - if not then print to your file.

you can see an example of how to look at each element in the array in my post

Featured Post

PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

Question has a verified solution.

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

Introduction While answering a recent question ( in the VB classic zone, I wrote some VB code in the (Office) VBA environment, rather than fire up my older PC.  I didn't post completely correct code o…
Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Suggested Courses
Course of the Month3 days, 19 hours left to enroll

630 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