# 日記ファイル切り戻し =begin usage: ruby diary_cut.rb 連日日記ファイル.txt 日記ファイル出力用ディレクトリは MYPATH を記述した行以降は、日付行が出てくるまで切り捨て。 日付行は Diary:y.m.d という形式(→Diary:なんらかの符号で連なる3数字=年,月,日)、 形式の融通はかなり効くはず。 Diary前では、 TODO行とWORD行とSCHEDULE行を判定、それぞれの指定ファイルへと切り出し。 各指定ファイル出力用ディレクトリは MYPATH2 =end require 'kconv' #ここの設定は各自の環境に合わせて修正 MYPATH = "../log/2003/" #diary出力用パス MYPATH2 = "../log/" #word,todo,schedule出力用パス #TOPIC = /^[*+○●◎□■◇◆△▲▽▼☆★]/s #空行付加トピック TOPIC = /^[*+○●◎□■◇◆△▲▽▼☆★].*?\n/s #空行削除トピック EODAY = // #終了行 DATEL = /^Diary:\D*(\d+)\D*(\d+)\D*(\d+)\D*/ #日付行 Diary:yyyy.mm.dd TODO = /^TODO:(.*)$/ #TODO行 TODO:todo.txt WORD = /^WORD:(.*)$/ #WORD行 WORD:word.txt SCHEDULE = /^SCHEDULE:(.*)$/ #SCHEDULE行 SCHEDULE:schedule.txt insystemKcode = 3 #sjis #1-jis,2-euc,3-sjis firstday = ARGV[0].to_i lastday = ARGV[1].to_i $stderr.puts 'CHK; ' + firstday.to_s + '-' + lastday.to_s + '.' #ファイル読込 days = [] #Dir.glob("#{MYPATH}*.diary").sort.each{ |file| Dir.glob("#{MYPATH}*.diary").sort.reverse.each{ |file| file =~ /(\d+).diary/ date = $1.to_i if (firstday <= date) && (date <= lastday) $stderr.puts 'CHK; ' + file str = open(file).read.sub(/<<\n/){ code, tag = $&, $1 if tag =~ DATEL code = tag end code } str.gsub!(TOPIC){ $&.chomp } days << str end } puts days.join("\n\n")