Rubyの部屋 Rubyのサンプルプログラム集

森下功啓製作所 ONLINE

tera termのタイムスタンプ処理クラスNEW

GPSやGISに関連するツールはこちらで公開しています。

tera termのタイムスタンプ処理クラス

使用言語:Ruby
開発環境:Windows7 (32bit), ActiveScriptRuby 1.8.7

マイコンを使用して観測データを記録する場合にシリアル通信でパソコンに観測データを送るという手段がしばしば採られます。 しかし観測データに観測時刻を埋め込むのは骨が折れます。 そこで tera term というシリアル通信用ターミナルソフトのログ機能にあるタイムスタンプを使用します。 この機能を使用すれば、実験のログに受信時刻をタイムスタンプとして付加することができるのです。

このタイムスタンプはExcelで簡単に処理できるのですが、実験データをプログラムで処理したい場合には処理が若干面倒です。 そこで、そんな煩わしさを払しょくするためにRubyでタイムスタンプを処理するクラスを書いてみました。

No. 機能
1 タイムスタンプを処理して、個々の要素へ構造体の様にアクセスできる

プログラムのダウンロード
リリース日 プログラムパッケージ 更新内容
2011/11/21 tera_term_time_stamp2.7z 時・分・秒を追加しました。
2011/7/3 tera_term_time_stamp.zip 初公開です。
サンプルコードを付けましたので利用は簡単だと思います。
=begin
--------------------------------------------------------------
tera termのタイムスタンプ付きのデータを解析するクラスです。
初めてのRubyでのクラス作り。

    開発者:K.Morishita Kumamoto-University
    開発履歴:2011/ 7/ 3    改行コードを削除するように変更
              2011/ 8/13    時刻を時・分・秒に分けて考えるように変更
              2011/ 8/20    エラー処理を追加
--------------------------------------------------------------
tab size: 4
--------------------------------------------------------------
=end

class Tera_term
    TERA_TERMst  = Struct.new(:WEEK, :MONTH, :DAY, :CLOCK, :YEAR, :OTHER)
    TERA_TERMst2 = Struct.new(:WEEK, :MONTH, :DAY, :CLOCK, :HOUR, :MINUTE, :SECOND, :YEAR, :OTHER)
    # テキストファイルを行ごとに配列にしたものを初期化時に受け取る(Rubyでのコンストラクタに相当)
    def initialize(txt = Array.new())
        @line = txt
        @rp = 0                                            # ファイルの読み込み位置も初期化
    end

    # 文字列を解析して返す
    def parser()
        return nil if @line.size - 1 < @rp                 # 最後まで読み切っていたらnilを返す
        str = @line[@rp]                                   # 1行取得
        @rp += 1                                           # 次の読み込み位置を更新
        field = TERA_TERMst.new(*str.split(" ", 6))        # 半角スペースで区切る
        return 0 if str.split(" ", 6).size != 6            # 分割数が得られなければ正常ではないので0を返す
        #p field            # debug code
        field.WEEK = field.WEEK[1,3]
        field.YEAR = field.YEAR[0,4]
        field.OTHER = field.OTHER.chomp                    # 改行コードを削除
        #p field            # debug code
        clock_arr = field.CLOCK.split(":")
        ans = TERA_TERMst2.new field.WEEK, field.MONTH, field.DAY.to_i, field.CLOCK, clock_arr[0].to_i, clock_arr[1].to_i, clock_arr[2].to_f, field.YEAR.to_i, field.OTHER
        #p ans
        return ans
    end
end
図1 tera termのログを解析するクラスのソースコード
ソースコードのhtml化にはhttp://kujirahand.com/tools/tougarasi/の唐辛子を利用しました。

基本的使い方

タイムスタンプ付きのtera termのログファイルの名前を引数として渡せば自動的に実行されます。
例えば、
txt = Tera_term.new(_line) # lineにはファイルから読みだした文字列が1行分入っているものとする
と書けば
p txt.YEAR # 年をコンソールに出力する
などと簡単に要素にアクセスする事ができます。


参考文献

inserted by FC2 system