RubyスクリプトをWindowsのexeファイルにしてくれるExerbなるものがある。
まず、Cygwin環境でインストール。
$ unzip exerb-4.1.0.zip
$ cd exerb-4.1.0
$ ruby setup.rb
以下は、CSVファイルの行を指定された項目でソートし、項目の入れ替えを行なうサンプル。
ファイルは、convert.rb、sort-array.rb、convert.confの3つ。
=== (convert.rb ここから) ===
#!/usr/bin/ruby
require "csv"
require "sort-array"
print "Now working..."
array_file = ARGV
if array_file
array_file.each do |file_name|
if FileTest.size?(file_name) && /(.*)\.csv$/i =~ file_name
to_file = $1 + '_new.csv'
array_input = Array.new
CSV.open(file_name, 'rb') do |row|
array_input <<>
array_output = SortArray.new.convert(array_input)
File.open(to_file, 'wb') do |output|
array_output.each do |array_line|
line = ""
array_line.each do |item|
if line.size == 0
line = item
else
line = line + ',' + item
end
end
line = line + "\r\n"
output.write(line)
end
end
end
end
end
exit
=== (convert.rb ここまで) ===
=== (sort-array.rb ここから) ===
class SortArray
# 設定ファイルの内容を取得してハッシュで返す
def get_conf
conf_file = "convert.conf"
hash_conf = Hash.new
if defined? ExerbRuntime
conf_file = File.dirname(ExerbRuntime.filepath) + "/" + conf_file
end
File.readlines(conf_file).each do |line|
line = line.sub(/(?:\r|\r\n|\n)\z/, "")
if /\a\s*(.*)\s*:\s*(.*)\s*\z/ =~ line
hash_conf["$1"] = "$2"
end
end
return hash_conf
end
# 引数の配列の要素を設定によって並べ替えて返す
def convert(array_input)
@array_input = array_input
hash_conf = self.get_conf
array_keys = Array.new
array_result = Array.new
hash_conf.each do |key,value|
if key == "sort_key"
array_keys = value.split(/\s*,\s*/)
end
end
array_result = @array_input.sort{|y,x| \
[x[array_keys[0].to_i],x[array_keys[1].to_i],x[array_keys[2].to_i]] \
<=> [y[array_keys[0].to_i],y[array_keys[1].to_i],y[array_keys[2].to_i]]}
array_result.each do |line_item|
line_item[1],line_item[2],line_item[3],line_item[4],line_item[5] \
= line_item[3],line_item[5],line_item[1],line_item[2],line_item[4]
end
return array_result
end
end
=== (sort-array.rb ここまで) ===
=== (convert.conf ここから) ===
sort_key:0,3,5
=== (convert.conf ここまで) ===
これらの準備ができたところで
$ mkexy convert.rb
$ exerb convert.exy
はい、これでconvert.exeのできあがり。
Windows上でconvert.exeに6項目以上からなるCSVファイルをドラッグ&ドロップすると、拡張子の前に_newがついた変換後のファイルが生成される。
0 件のコメント:
コメントを投稿