Ruby Forum Ruby > Need help for finding difference between files

Posted by Cheyne Li (cheyne)
on 14.05.2008 00:19
Hi, there

Is there a simple way to find the difference between two files? I'm a
new ruby learner. I'm not familiar with the Stander class in Ruby. Is
there any can find the difference between two files and return a string
or array?
Posted by Clement Ow (owc)
on 14.05.2008 08:32
Cheyne Li wrote:
> Hi, there
> 
> Is there a simple way to find the difference between two files? I'm a
> new ruby learner. I'm not familiar with the Stander class in Ruby. Is
> there any can find the difference between two files and return a string
> or array?

What kinda difference do you wanna look at? is is file attributes?

You can try something like File.compare or File.fnmatch which wll return 
true if the file matches..

If it's not something what you really need, please do explain your 
situation abit more and maybe more people might be able to help ;)
Posted by Cheyne Li (cheyne)
on 14.05.2008 18:29
Clement Ow wrote:
> Cheyne Li wrote:
>> Hi, there
>> 
>> Is there a simple way to find the difference between two files? I'm a
>> new ruby learner. I'm not familiar with the Stander class in Ruby. Is
>> there any can find the difference between two files and return a string
>> or array?
> 
> What kinda difference do you wanna look at? is is file attributes?
> 
> You can try something like File.compare or File.fnmatch which wll return 
> true if the file matches..
> 
> If it's not something what you really need, please do explain your 
> situation abit more and maybe more people might be able to help ;)

Ok, I need to compare the contents in 2 files. Print out each difference 
in both files. for example, if i have 2 files: f1.txt, f2.txt

in f1:                                  in f2:
I'm learning ruby.                      I'm learning ruby.
I'm not good at it.                     I'm good at it.

So, I want to know if there a function can return an array that contains 
"I'm not good at it." and "I'm good at it."

I wonder if I have to compare line by line or there is function in Ruby 
would do that for me.
Posted by Michael Linfield (macgoober)
on 14.05.2008 18:54
> I wonder if I have to compare line by line or there is function in Ruby 
> would do that for me.

file1 = File.readlines("f1.txt")
file2 = File.readlines("f2.txt")

file1&file2
#=> "I'm learning ruby."

The '&' symbol can be used to compare arrays, it will return any matches 
between the 2.

Regards,

- Mac
Posted by Todd Benson (Guest)
on 14.05.2008 18:58
(Received via mailing list)
On Wed, May 14, 2008 at 11:29 AM, Cheyne Li
<happy.go.lucky.clr@gmail.com> wrote:
>>
> I'm learning ruby.                      I'm learning ruby.
> I'm not good at it.                     I'm good at it.
>
> So, I want to know if there a function can return an array that contains
> "I'm not good at it." and "I'm good at it."
>
> I wonder if I have to compare line by line or there is function in Ruby
> would do that for me.

If you don't mind reading the whole files in to memory, you can try
doing something like...

arr1 = File.open("f1", "r").readlines
arr2 = File.open("f2", "r").readlines
arr1 - arr2  # all in arr1 not in arr2
arr2 - arr1  # all in arr2 not in arr1
arr1 || arr2  # all that both share (intersection)
arr1 && arr2  # every line from both (union)

hth,
Todd
Posted by Todd Benson (Guest)
on 14.05.2008 19:02
(Received via mailing list)
On Wed, May 14, 2008 at 11:57 AM, Todd Benson <caduceass@gmail.com> 
wrote:
>>>
>>
> If you don't mind reading the whole files in to memory, you can try
> doing something like...
>
> arr1 = File.open("f1", "r").readlines
> arr2 = File.open("f2", "r").readlines
> arr1 - arr2  # all in arr1 not in arr2
> arr2 - arr1  # all in arr2 not in arr1
> arr1 || arr2  # all that both share (intersection)
> arr1 && arr2  # every line from both (union)

Sorry that's | and &, _not_ || and && and I had it backwards...

arr1 | arr2 # all of both
arr1 & arr2 # all that intersect

sorry for confusion,
Todd
Posted by Cheyne Li (cheyne)
on 14.05.2008 20:24
Michael Linfield wrote:
>> I wonder if I have to compare line by line or there is function in Ruby 
>> would do that for me.
> 
> file1 = File.readlines("f1.txt")
> file2 = File.readlines("f2.txt")
> 
> file1&file2
> #=> "I'm learning ruby."
> 
> The '&' symbol can be used to compare arrays, it will return any matches 
> between the 2.
> 
> Regards,
> 
> - Mac

Thanks man. I found that using "-" can find all differences

diff = file1 - file2
Posted by Reid Thompson (Guest)
on 15.05.2008 04:48
(Received via mailing list)
Cheyne Li wrote:
> Clement Ow wrote:
>> Cheyne Li wrote:
>>> Hi, there
>>>
>>> Is there a simple way to find the difference between two files?

http://en.wikipedia.org/wiki/Diff
Posted by Dominic Sisneros (Guest)
on 15.05.2008 07:19
(Received via mailing list)
ruby diff-lcs will do this

On Wed, May 14, 2008 at 12:32 AM, Clement Ow 
<clement.ow@asia.bnpparibas.com>