2013年10月01日

rubyって便利ですね

設定値やらなんやらの管理とか作成とかでCSV形式のデータを扱う事が多いのですが、ちょっと中身変えて、チェックサム計算してなんてことをするのにrubyが便利なんで、ご紹介。

私の場合、レジスタ設定とかが多いのですが、1アドレスに対して1データの形式で管理するので、アドレスをキーとしたハッシュを作るとめちゃくちゃ簡単にデータ変更やら差分管理ができちゃいます。

ということで、ちょっとしたコード例を。

データは「ex_reg1.csv」というファイル名で、
0000,A0
0001,01
0002,0A
...
0FFF,F8
みたいなデータの場合、
------------------------------------
require "csv"
file1 = CSV.readlines( "ex_reg1.csv" )
hash1 = Hash[*file1.flatten]
------------------------------------

なんと、これだけで
p hash["0FFF"]
でコマンドプロンプトには「F8」と表示されます。

なので、例えばアドレス:06D1を書き換えたければ
hash1["06D1"] = "0A"
と書けば06D1が0Aになるんです。

そして、書き換えたあとのファイルを「ex_reg2.csv」としてファイルを作ると、
------------------------------------
file2 = open( "ex_reg2.csv", "w")
hash1.each{ |key, val| file2.write( key.to_s + "," + val.to_s + "\n")}
file2.close
------------------------------------
これだけです。
差分をとるときは、

------------------------------------
require "csv"
file1 = CSV.readlines( "ex_reg1.csv" )
hash1 = Hash[*file1.flatten]
file2 = CSV.readlines( "ex_reg2.csv" )
hash2 = Hash[*file2.flatten]
dif_key = Array.new
dif_key = hash1.reject{ |key, val| val == hash2[key] }.keys
dif_key.each do |dif|
p dif.to_s + " : " + hash1[dif].to_s + " -> " hash2[dif].to_s
end
--------------------------------------
これでコマンドプロンプトに
「06D1 : A0 -> 0A」
のように表示されます。

これをテキストに出力すると履歴も残せます。

あぁ、便利・・・
rubyちゃんと勉強しよう。
posted by luuuuga at 22:52| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。