Order some files by time before display

Hi everybody,

I have write a short script that display each article of a folder:

require ‘find’
result = []
@pattern = ‘*.html’
Find.find(‘public/2008/’) do |p|
next unless File.file?§
name = File.basename§
result << p if File.fnmatch(@pattern, name)
end
a = ‘’
result.length.times do |i|
content = File.read(result[i])
a += ‘


a += content
a += ‘’ + File.ctime(result[i]).to_s + ‘’
a += ‘

end
a

As you can see, it display some articles in a webpage. However, but I
would like to order them by time (with File.ctime(result[i]) for
instance) such as in blogs. If you see a sexy way to do so, that would
be very helpful for me.

Thanks,
Dendicus

Hi David,

David B. wrote:

require ‘find’
result = []
@pattern = ‘*.html’
Find.find(‘public/2008/’) do |p|
next unless File.file?§
name = File.basename§
result << p if File.fnmatch(@pattern, name)
end

No need for ‘find’. A simple ‘glob’ suffices:

files = Dir[File.join(‘public/2008/’, ‘**’, @pattern)]

David B. wrote:

a = ‘’
result.length.times do |i|
content = File.read(result[i])
a += ‘


a += content
a += ‘’ + File.ctime(result[i]).to_s + ‘’
a += ‘

end
a

Iterating over an array like this is kind of cumbersome. ‘each’ should
be your weapon of choice here. Furthermore using the << operator for
concatenation could yield in better performance as += constructs a new
String object whereas << doesn’t (AFAIK).

David B. wrote:

As you can see, it display some articles in a webpage. However, but I
would like to order them by time (with File.ctime(result[i]) for
instance) such as in blogs. If you see a sexy way to do so, that would
be very helpful for me.

Hope that’s sexy enough for you:

result = result.sort_by { |p| File.ctime§ }

To sum it all up here is how I would have done it:


@dir = ‘public/2008’
@pattern = ‘*.html’

files = Dir[File.join(@dir, ‘**’, @pattern)].select { |f| File.file?(f)
}
files = files.sort_by { |f| File.ctime(f) }

a = ‘’
files.each do |f|
a << ‘

a << File.read(f)
a << ‘’ + File.ctime(f).to_s + ‘’
a << ‘

end
a

Hope that helps!

Regards,
Matthias

Many thanks, Matthias! Your answer was perfectly resolve my problem and
now the code is really more fashion!

Thanks again,
Dendicus

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs