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素人が突貫で作成&作成途中のプログラムなので, 不備が多いかと思います。

また,このプログラムを走らせた結果生じた故障などに関しては一切責任はとれません。

文法等確認の上ご使用ください。

環境

  • OS : Ubuntu 8.04
  • Ruby : 1.8

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

添付ファイル: filedatacombine.rb 103件 [詳細] filecsvchanger2.rb 109件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-07-27 (火) 21:18:07 (41d)