Ruby †Ubuntu 10.04 へのインストール †デフォでは、1.8 がインストールされる。 $ sudo apt-get install ruby ruby-dev rubygems ri
1.9.1 もインストールしたい場合は、1.9.1をインストールした後に、ここの記述にしたがって、update-alternatives を実行しておく。(後から 異なるバージョンの Ruby をインストールしても、選択的にあるバージョンを実行できるようにするため) $ sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.9.1 400 \ --slave /usr/share/man/man1/ruby.1.gz ruby.1.gz \ --slave /usr/share/man/man1/ruby.1.gz ruby.1.gz \ /usr/share/man/man1/ruby1.9.1.1.gz \ --slave /usr/bin/ri ri /usr/bin/ri1.9.1 \ --slave /usr/bin/irb irb /usr/bin/irb1.9.1 \ --slave /usr/bin/rdoc rdoc /usr/bin/rdoc1.9.1 複数のバージョンの Ruby がインストールされている場合は、 $ sudo updat-alternatives --config ruby $ sudo updat-alternatives --config gem が必要なので注意。 ruby-serialport †インストール †Ruby で RS-232C などのシリアルポートを統一的に扱うための仕組み。Ruby-1.9.1 ではエラーが出てインストールできなかったので、泣く泣く 1.8 をインストールして、ビルドした。 $ mkdir workdir $ cd workdir $ wget http://rubyforge.org/frs/download.php/49992/ruby-serialport-0.7.0.tar.gz $ tar zxvf ruby-serialport-0.7.0.tar.gz $ cd ruby-serialport-0.7.0 $ sudo gem install ruby-serialport プログラムの書き方 †ソースコードに、以下の2行を追加する。 require 'rubygems' require 'serialport' 0.6.0 では rubygems の行は不要だったようだが、0.7.0 ではこの行を入れないとエラーになった。 Rubyで作成したプログラムを置くpage †Ruby素人が突貫で作成&作成途中のプログラムなので, 不備が多いかと思います。 また,このプログラムを走らせた結果生じた故障などに関しては一切責任はとれません。 文法等確認の上ご使用ください。 環境 †
CSV fileを読み込み、表記を変えるprogram †入手できるデータが以下のようなCSVファイル(元は.xls) "日付","時刻","緯度","経度","船速","針路" ,,,,, 07/09,8:54,"34-36.634N","136-33.573E",0,297.3 07/09,8:55,"34-36.634N","136-33.572E",0,297.3 07/09,8:56,"34-36.634N","136-33.575E",0,297.3 (以下略) であったので,日付や時刻の同期や,GRASSに適用する際の緯度経度形式を変更した以下のような形式 0709,0854,34.6106,136.5596,0,297.3 0709,0855,34.6106,136.5595,0,297.3 0709,0856,34.6106,136.5596,0,297.3 にするためのprogram require "csv"
count=0
# csv wo hiraite gyo(row) wo yomikomu
CSV.open("0709kokai4.csv", 'r') do |row|
if count>1 then
# date no / wo remove suru tameno program
date=row[0]
row[0]=date.delete("/")
# time no : wo remove suru program
time=row[1]
# hour = 1keta no toki, mae ni 0 tsuika
if time[5,1]==nil then
time="0" + time
end
row[1]=time.delete(":")
# ido-keido(lon&lat) wo keisan suru program
lat=row[2]
latD=lat[0,2]
latM=lat[3,6]
row[2]=sprintf("%.4f",latD.to_i+latM.to_f/60)
lon=row[3]
lonD=lon[0,3]
lonM=lon[4,6]
row[3]=sprintf("%.4f",lonD.to_i+lonM.to_f/60)
# gyo(row) wo "," de kugitte hyoji
puts row.join(",")
end
count+=1
end
上記programで作成したCSVファイルとtxtファイルを同期させ,出力させるprogram †上記programで作成したCSV形式のファイル 0709,0854,34.6106,136.5596,0,297.3 0709,0855,34.6106,136.5595,0,297.3 0709,0856,34.6106,136.5596,0,297.3 と,txtファイル 20090709,005402.00,100, 31 20090709,005602.00,100, 31 (ちなみに形式は、年月日,時刻(世界時間),回数,強度(必要なデータ)) を日付・時刻で同期させ,合体させるprogram require "csv"
# command : ruby datacombine.rb <strengthdata> <csvdata>
cate=0
# mazu, denpa kyodo(strength) no file wo read
CSV.open(ARGV[0], 'r') do |str|
strtime=str[1]
strdate=str[0]
strtm=strtime[0,4]
strtime=strtm.to_i+900
if strtime.to_s[4,1]==nil then
strtime="0"+strtime.to_s
elsif strtime>2400 then
strtime-=2400
strtime=strtime.to_s
strdate.to_i+=1
strdate.to_i=strdate.to_s
else
strtime=strtime.to_s
end
# tugini, ship's data no file wo read
CSV.open(ARGV[1], 'r') do |row|
shiptime=row[1]
# strength time = csv time no toki combine site syutsu-ryoku
if strdate[4,4]==row[0] then
if strtime==shiptime then
row << str[2]
row << str[3]
row << cate
puts row.join("|")
cate+=1
break
end
end
end
end
出力結果は 0709|0954|34.6182|136.5613|10|21.3|100| 31|0 0709|0956|34.6239|136.5646|11.6|34.6|100| 31|1 |