From: Jim Freeze Date: 2005-09-10T03:34:40+09:00 Subject: Re: [QUIZ] NDiff (#46) Hi To help the quiz writers focus on the 'the quiz' and not the administrative part of the code and to help promote CommandLine, here is a little snippet that some may find useful to get started. #!/usr/bin/env ruby require 'rubygems' require 'commandline' class NDiffApp < CommandLine::Application def initialize author "Jim Freeze" copyright "2005 Jim Freeze" synopsis "[-hqs] [-d INT] [-t DBL] file1 file2" short_description "Numerically compare files line by line, "+ "numerical field by numerical field." option :names => %w(--digits -d), :opt_description => "Maximum number of significant digits that "+ "should match. (default: 0)", :arg_description => "INT", :opt_found => get_arg, :opt_not_found => "0" option :names => %w(--tolerance -t), :opt_description => "Tolerate <= DBL distance between numbers. "+ "(default: 0.0)", :arg_description => "DBL", :opt_found => get_arg, :opt_not_found => "0.0" option :flag, :names => %w(--statistics -s), :opt_description => "Provide comparison statistics only. (extra credit)" option :flag, :names => %w(--quiet -q), :opt_description => "No output printed to screen. just exit code.??" option :help expected_args :file1, :file2 end def main NDiff.new(@file1, @file2, @option_data["--digits"].to_i, @option_data["--tolerance"].to_f, @option_data["--statistics"], @option_data["--quiet"]) end end#class NDiffApp class NDiff # Your code here def initialize(file1, file2, digits=0, tolerance=0.0, statistics=false, quiet=false) p file1 p file2 p digits p tolerance p statistics p quiet end end#class NDiff The printout is quit nice, and it takes no extr effort: % ./ndiff Usage: ndiff [-hqs] [-d INT] [-t DBL] file1 file2 % ./ndiff file1 ERROR: Missing expected arguments. Found 1 but expected 2. Usage: ndiff [-hqs] [-d INT] [-t DBL] file1 file2 % ./ndiff -h NAME ndiff - Numerically compare files line by line, numerical field by numerical field. SYNOPSIS ndiff [-hqs] [-d INT] [-t DBL] file1 file2 OPTIONS --digits,-d INT Maximum number of significant digits that should match. (default: 0) --tolerance,-t DBL Tolerate <= DBL distance between numbers. (default: 0.0) --statistics,-s Provide comparison statistics only. (extra credit) --quiet,-q No output printed to screen. just exit code.?? --help,-h Displays help page. AUTHOR: Jim Freeze COPYRIGHT (c) 2005 Jim Freeze A little note, I did not understand "just exit code" for -q. What is '-q' supposed to do. No output at all? It also appears that the ability to type cast input to floats or ints or whatever should be added to CommandLine. All comments are appreciated. -- Jim Freeze