Solved

Highlight Differenct character in 2 text files

Posted on 2006-11-13
8
166 Views
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
            Next
        Next
      Close ff7
      Close ff8
End Sub
0
Comment
Question by:haiderms
  • 3
  • 2
8 Comments
 
LVL 35

Accepted Solution

by:
Raynard7 earned 250 total points
ID: 17936517
Hi,
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
       else
          dicNew.add strData, 1
       end if
    Next i

getData = dicNew
end function
0
 

Author Comment

by:haiderms
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

            Next
           
        Next
0
 
LVL 35

Expert Comment

by:Raynard7
ID: 17936611
what are you doing it with?

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

Author Comment

by:haiderms
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.





0
 
LVL 35

Expert Comment

by:Raynard7
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
0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

I’ve seen a number of people looking for examples of how to access web services from VB6.  I’ve been using a test harness I built in VB6 (using many resources I found online) that I use for small projects to work out how to communicate with web serv…
When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

707 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

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now