List of directory

Hi,

Does anybody know how to list directory in alphabetical order? i.e.
I have following files:
a10
a1
a2
a20

sort method sorts them as follows:

a1
a10
a2
a20

but I need such order:

a1
a2
a10
a20

Any help would be helpful.
Thanks in advance

2007/7/26, Marcin T. [email protected]:

a20
Apparently you want to sort by the numeric part. You can extract it
with a regular expression like this:

irb(main):017:0> a.sort_by {|x| x[/\d+/].to_i }
=> [“a1”, “a2”, “a10”, “a20”]

Kind regards

robert

Robert K. wrote:

2007/7/26, Marcin T. [email protected]:

a20
Apparently you want to sort by the numeric part. You can extract it
with a regular expression like this:

irb(main):017:0> a.sort_by {|x| x[/\d+/].to_i }
=> [“a1”, “a2”, “a10”, “a20”]

Kind regards

robert

I’ve done it as follows:

arrOfFiles.sort! do |file1, file2|

f1 = file1.slice(/\d+.sql/)
f1 = f1.slice(/\d+/)

f2 = file2.slice(/\d+.sql/)
f2 = f2.slice(/\d+/)

f1.to_i <=> f2.to_i
end

Thanks Robert

2007/7/26, Marcin T. [email protected]:

Kind regards

f2 = file2.slice(/\d+.sql/)
f2 = f2.slice(/\d+/)

f1.to_i <=> f2.to_i
end

Well, if you want to sort in place you could do

irb(main):003:0> %w{a10 a1 a2 a20}.sort! {|*a| a.map{|x|
x[/\d+/].to_i}.inject {|a,b| a<=>b}}
=> [“a1”, “a2”, “a10”, “a20”]

Um, not very readably I guess.

:-)))

Kind regards

robert

On Jul 26, 4:54 am, Marcin T. [email protected] wrote:

a10
a2
a20

but I need such order:

a1
a2
a10
a20

files = %w| a1 ab1a ab1b ac1 a2 ab2 ab3 b1 bb1 ba1 a10 a20 a10a a aa
ab ac |
puts files.sort_by{ |f|
f.split( /(\d+)/ ).map{ |piece|
Integer(piece) rescue piece
}
}

#=> a
#=> a1
#=> a2
#=> a10
#=> a10a
#=> a20
#=> aa
#=> ab
#=> ab1a
#=> ab1b
#=> ab2
#=> ab3
#=> ac
#=> ac1
#=> b1
#=> ba1
#=> bb1