mamimi2stk.rb: 0.1.3

#!/bin/ruby

=begin
No warranty.
完全無保証(あなた様の責任でご使用下さい)。

ご注意!!
ログファイルは非常に大切なものですので、必ずコピーをとり、
全く別の場所へ避難させておいて下さい。

Filename : mamimi2stk.rb
Author   : sak (http://sak.que.jp/)
Revision : 0.1.3
Date     : Sat Apr 17 06:50:00 JST 2004
Require  : Ruby

Change log:
0.1.0 : March 8th 2004
0.1.1 : March 9th 2004
0.1.2 : Sat Apr 10 01:20:28 JST 2004

mamimiログを各種簑形式へ変換するRubyスクリプト。
標準入力から入れると標準出力から出てきます。
Ruby 1.8.1を想定。それ以外での動作は不明。

使用例
ruby mamimi2stk.rb < 入力ファイル.log > 出力ファイル.stk

インストール:
スクリプト一行目のruby実行ファイルへのパスは、
お使いの環境に合わせて適切に書きかえて下さい。

既知の不具合:
1.日本語コードの自動認識はしませんので、
  スクリプトとSTKファイルの日本語コードを同じにしてから、
  ご使用下さい。

2.変換前ログの発言中に簑系のカードが含まれている場合、
  変換後にはカードの中にカードができることになります。
  気になる方は、このスクリプトを通す前に、
  何らかの前処理をして下さい。
=end

#出力フォーマットを三者から選択できます。
#・新簑形式:1
#・簑板形式:2
#・旧簑形式:3
#↓手書きで書きかえて下さい。
FORMAT = 1

abort('Aborted by something wrong.') if FORMAT != 1 && FORMAT != 2 && FORMAT != 3

stat = 0
str_subj = ''
str_from = ''
str_date = ''
temp = []

while gets do
        if $_ =~ /^\.$/ && stat == 0
                temp << '.'
                stat = 1

        elsif $_ =~ /^Subject:.*$/ && (stat == 1 || $. == 1)
                temp << $_.chomp
                str_subj = $_.chomp
                stat = 2

        elsif $_ =~ /^From:.*$/ && stat == 2
                temp << $_.chomp
                str_from = $_.chomp
                stat = 3

        elsif $_ =~ /^Date:(\d{4}\/\d{2}\/\d{2}) (\d{2}:\d{2}:\d{2})$/ && stat == 3
                timestamp = $1 + '(' + $2 + ')'
                if FORMAT == 3
                        /Subject:(.*)/ =~ str_subj
                        puts '=' * 78 if $. != 3
                        puts '@'
                        puts timestamp + '[題]:' + $1
                        puts '-' * 78
                        /^(From:)(.*)/ =~ str_from
                        puts '[投稿者]:' + $2
                else
                        puts if $. != 3
                        puts '@'
                        puts timestamp
                        if FORMAT == 2
                                puts str_from + ' ' + str_subj
                        else
                                /Subject:(.*)/ =~ str_subj; puts $1
                                /^(From:)(.*)/ =~ str_from; puts $1 + ' ' + $2
                        end
                end
                puts
                temp = []; stat = 4

        elsif $_ =~ /^\s*$/ && stat == 4
                next

        else
                puts temp; temp = []
                puts $_
                stat = 0
        end
end
puts '=' * 78 if FORMAT == 3

2004/04/17(06:50:08)