#! /usr/bin/env ruby require 'date' require 'getoptlong' def printUsage print "\ Usage: diarysplit.rb [OPTIONS] [ChangeLog] -o, --output=FILE 出力先のファイルを指定する。指定されなければ標準出力に出力する。 -d, --date=DATE 指定された日付のみを表示する。フォーマットは yyyy-mm-dd。 -x, --exclude 今日の日付以外の項目を出力する。 -h, --help このメッセージを表示。 " end def parseOption options = Hash.new parser = GetoptLong.new parser.set_options(['--output', '-o', GetoptLong::REQUIRED_ARGUMENT], ['--help', '-h', GetoptLong::NO_ARGUMENT], ['--date', '-d', GetoptLong::REQUIRED_ARGUMENT], ['--exclude', '-x', GetoptLong::NO_ARGUMENT]); parser.each_option { |name, arg| options[name.sub(/^--/, '')] = arg } if options['date'] != nil and not options['date'] =~ /\d\d\d\d-\d\d-\d\d/ puts "invalid date format"; exit 0 end if options['date'] == nil date = Date::today options['date'] = format("%4d-%02d-%02d", date.year, date.month, date.day) end if options['help'] printUsage exit 0 end return options end def main options = parseOption if options['output'] == nil f = $stdout else f = File.open(options['output'], "w") end date = "^" + options['date'] exitFlag = FALSE outputFlag = options['exclude'] != nil while line = ARGF.gets if line =~ /^\d\d\d\d-\d\d-\d\d/ and exitFlag == FALSE outputFlag = TRUE if options['exclude'] != nil if line =~ date and options['exclude'] == nil # 指定日を取り出す f.puts line outputFlag = TRUE exitFlag = TRUE elsif line =~ date and options['exclude'] != nil # 指定日以外を取り出す outputFlag = FALSE else f.puts line if outputFlag == TRUE end elsif line =~ /^\d\d\d\d-\d\d-\d\d/ if exitFlag == TRUE f.close exit else outputFlag = TRUE end else if outputFlag f.puts line end end end end main