Require 'diff/lcs/Array'

Hi All,

I need compare two text files. I should require ‘diff/lcs/Array’ when i
do this iam getting error. Should i install any additional gem(if yes
pls share the link). I am using Scite editor. As iam very new to ruby
kindly help me in this.

Thanks,
Venkat

On Feb 25, 2009, at 11:17 AM, Venkat K. wrote:

I need compare two text files. I should require ‘diff/lcs/Array’
when i
do this iam getting error.

I’ve tried using that library in the past, but its interface just
makes it crazy hard to work with. Now I would just do something like:

diff = diff -u #{shell_escape path1} #{shell_escape path2} 2>&1

I would define shell_escape() as something like:

def shell_escape(str)
String(str).gsub(/(?=[^a-zA-Z0-9_./-\x7F-\xFF\n])/n, ‘\’).
gsub(/\n/, “’\n’”).
sub(/^$/, “’’”)
end

Hope that helps.

James Edward G. II

Hi ,

Thanks a lot for all ur replies… My problem is I could’t require
‘diff/lcs’. I am getting an error message like.

c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`gem_original_require’: no such file to load – diff/lcs/Array
(LoadError)

Should I install any additional gem. kindly help me

Thanks,
venkat

Daniel B. wrote:

On Feb 25, 10:55�am, James G. [email protected] wrote:

On Feb 25, 2009, at 11:17 AM, Venkat K. wrote:

I need compare two text files. I should require ‘diff/lcs/Array’ �
when i
do this iam getting error.

I’ve tried using that library in the past, but its interface just �
makes it crazy hard to work with.

I came up with this for diff’ing 2 files and spitting the results to
stdout. It’s meant to simulate “diff -u” output, but it’s not quite
identical and is definitely not tested thoroughly:

diff_test.rb

require ‘diff/lcs’

The file ‘test1.txt’ contains the following 3 lines:

This is a house

Hello World

My favorite color is blue

The file ‘test2.txt’ contains the following 3 lines:

This is a car

Hello World

My favorite color is green

module Diff
module LCS
def self.diff_files(file1, file2)
array1 = IO.readlines(file1)
array2 = IO.readlines(file2)
diffs = diff(array1, array2)

     print diffs.first[0].action * 3 + ' '
     print file1
     print "\t" + File.mtime(file1).to_s

     puts

     print diffs.first[1].action * 3 + ' '
     print file2
     print "\t" + File.mtime(file2).to_s

     puts

     diffs.each_with_index{ |diff, i|
        diff.each{ |d|
           puts d.action + d.element
        }
     }
  end

end
end

Diff::LCS.diff_files(‘test1.txt’, ‘test2.txt’)

Here was the output of Diff::LCS.diff_files:

— test1.txt Wed Feb 25 12:18:42 -0700 2009
+++ test2.txt Wed Feb 25 12:18:53 -0700 2009
-This is a house
+This is a car
-My favorite color is blue
+My favorite color is green

Hope that was useful.

Regards,

Dan

On Feb 25, 10:04 pm, Venkat K. [email protected] wrote:

Hi ,

Thanks a lot for all ur replies… My problem is I could’t require
‘diff/lcs’. I am getting an error message like.

c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`gem_original_require’: no such file to load – diff/lcs/Array
(LoadError)

Should I install any additional gem. kindly help me

Something may have gone wrong with your gem install. I would try
uninstalling diff-lcs and reinstalling it.

You haven’t installed it manually also, have you? Maybe you have it in
your sitelib dir as well, and it’s missing there.

Regards,

Dan

James G. wrote:

I would define shell_escape() as something like:

def shell_escape(str)
String(str).gsub(/(?=[^a-zA-Z0-9_./-\x7F-\xFF\n])/n, ‘\’).
gsub(/\n/, “’\n’”).
sub(/^$/, “’’”)
end

Nice! I always wished this method was in the Ruby stdlib. Maybe it
could be added as a class method of the Shell class in the “shell”
stdlib?

require ‘shell’
Shell.escape(‘foo “bar”.txt’)

Shall I file a feature request to ruby-core?

On Feb 26, 2009, at 4:05 PM, Suraj K. wrote:

Nice! I always wished this method was in the Ruby stdlib. Maybe it
could be added as a class method of the Shell class in the “shell”
stdlib?

It’s in Ruby 1.9. See my notes at the bottom of this post:

http://blog.grayproductions.net/articles/the_secret_shell_helper

James Edward G. II

On Feb 25, 10:55 am, James G. [email protected] wrote:

On Feb 25, 2009, at 11:17 AM, Venkat K. wrote:

I need compare two text files. I should require ‘diff/lcs/Array’
when i
do this iam getting error.

I’ve tried using that library in the past, but its interface just
makes it crazy hard to work with.

I came up with this for diff’ing 2 files and spitting the results to
stdout. It’s meant to simulate “diff -u” output, but it’s not quite
identical and is definitely not tested thoroughly:

diff_test.rb

require ‘diff/lcs’

The file ‘test1.txt’ contains the following 3 lines:

This is a house

Hello World

My favorite color is blue

The file ‘test2.txt’ contains the following 3 lines:

This is a car

Hello World

My favorite color is green

module Diff
module LCS
def self.diff_files(file1, file2)
array1 = IO.readlines(file1)
array2 = IO.readlines(file2)
diffs = diff(array1, array2)

     print diffs.first[0].action * 3 + ' '
     print file1
     print "\t" + File.mtime(file1).to_s

     puts

     print diffs.first[1].action * 3 + ' '
     print file2
     print "\t" + File.mtime(file2).to_s

     puts

     diffs.each_with_index{ |diff, i|
        diff.each{ |d|
           puts d.action + d.element
        }
     }
  end

end
end

Diff::LCS.diff_files(‘test1.txt’, ‘test2.txt’)

Here was the output of Diff::LCS.diff_files:

— test1.txt Wed Feb 25 12:18:42 -0700 2009
+++ test2.txt Wed Feb 25 12:18:53 -0700 2009
-This is a house
+This is a car
-My favorite color is blue
+My favorite color is green

Hope that was useful.

Regards,

Dan