Rubyの部屋 Rubyのサンプルプログラム集 |
マイコンを使用して観測データを記録する場合にシリアル通信でパソコンに観測データを送るという手段がしばしば採られます。 しかし観測データに観測時刻を埋め込むのは骨が折れます。 そこで 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のログを解析するクラスのソースコード
タイムスタンプ付きのtera termのログファイルの名前を引数として渡せば自動的に実行されます。
例えば、
txt = Tera_term.new(_line) # lineにはファイルから読みだした文字列が1行分入っているものとする
と書けば
p txt.YEAR # 年をコンソールに出力する
などと簡単に要素にアクセスする事ができます。