[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[kagemai-users:0341] Re: CSV出力のためのスクリプト



福岡です。

teku san wrote:
 
| 現在、保存形式をXMLにして使っています。
| 
| 要望等であるように最新の投稿内容をCSV出力したいと考えています。
| 
| スクリプトで簡単にできるとのことですが、
| サンプルでもいいの教えていただけないでしょうか?

投稿されている全メッセージを出力する例が、[kagemai-users:0049] や
[kagemai-users:0055] にあります。たぶん今でも動きます。

全メッセージではなく、各レポートの最新の情報だけがみたいのであれば、
Report から Message を取り出すのではなく、Report#[] などを使うと
いいんじゃないかと。[kagemai-users:55] をベースにするなら、以下の
ような感じでいけると思います。
# 実際に動かしてはいません


#!/usr/bin/ruby -Ke

## usage: ruby export.rb project-id

kagemai_root = "/home/fukuoka/kagemai"        # setup
config_file  = "#{kagemai_root}/kagemai.conf" # setup

$: << "#{kagemai_root}/lib"
require 'kagemai/config'

Kagemai::Config.initialize(kagemai_root, config_file)

require 'kagemai/bts'
require 'kagemai/project'
require 'kagemai/message_bundle'

module Kagemai

  def self.export(project_id)
    MessageBundle.open(Config[:resource_dir], 
                       Config[:language], 
                       Config[:message_bundle_name])
    
    bts = BTS.new(Config[:project_dir])
    project = bts.open_project(project_id)
    
    project.each do |report|
      line = [report.id]
      report.each_attr do |etype|
        value = report[etype.id].to_s
        line << "\"" + value.gsub(/"/, '""') + "\""
      end
      puts line.join(',')
    end
  end

end

if $0 == __FILE__ then
  unless ARGV.size == 1 then
    puts "usage: ruby export.rb project-id"
    exit 1
  end

  project_id = ARGV.shift
  Kagemai::export(project_id)
end

-- 
福岡ともゆき <fukuoka@xxxxxxxxxxxxx>
http://www.daifukuya.com/