As a simple example of using the getoptlong library (as well as an example of various array methods), here is a simple version of the UNIX sort program, implemented in Ruby.
sort.rb
#!/usr/bin/env ruby require 'getoptlong' class SortProgram private def do_args parser = GetoptLong.new( ['-u', '--unique', GetoptLong::NO_ARGUMENT], ['-r', '--reverse', GetoptLong::NO_ARGUMENT] ) @unique = false parser.each do |opt, arg| case opt when '-u' @unique = true when '-r' @reverse = true end end end public def main do_args lines = [] if ARGV.length > 0 ARGV.each do |path| lines = File.readlines(path) end else lines = File.readlines('/dev/stdin') end lines.sort! if @unique lines.uniq! end if @reverse lines.reverse! end lines.each { |e| print e } end end program = SortProgram.new program.main
Consider the sample input:
input.txt
apple orange banana canteloupe orange
We can sort the input in alphabetical order by
cat input.txt | ./sort.rb
or
./sort.rb input.txt.
The -r or --reverse flags sort in reverse-alphabetical order, and the -u or --unique flags output only unique entries.
No comments:
Post a Comment