«前の日記(2009年 05月17日(Sun)) 最新 次の日記(2009年 05月19日(Tue))» 編集

日記のような何か

2002|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|08|09|10|11|12|
2020|01|02|03|04|06|07|08|09|10|11|12|
2021|01|02|03|04|05|07|08|10|11|12|
2022|01|

ようこそいらっしゃいました。
あなたは今日人目、合計人目のお客様です(ちなみに昨日は人のお客様がいらっしゃいました)。
よろしければツッコミに足跡等を残していって下さいな。

My status ← skypeやってます。


2009年 05月18日(Mon) [長年日記]

_ [TCG][Chaos][プログラム][ruby]ChaosTCGのエクセル版カードリストを作ろう(その4)

ローソン限定のカレンダーとか昔だったら即飛びついていたんですが、この不況の影響で未だ迷っています(謎)

と、エントリと関係無い話題はおいといて。

前回「少しへんな所が残ってる」と書いたのは、効果テキストにタグが残ったままになっているケースがあったためです。

Chaosの効果テキストには赤字や青字で書かれている部分があって、公式のカードリストではその部分がFontタグで囲まれていたわけです。

しかもChaosにおいてテキストの色はルール上非常に重要だったりしますので、色情報を省略するわけにもいきません。ところで2色しか使えない媒体でカードテキスト表現しようと思ったらどうするんだろう? あと関連する話として、TCGって色覚異常者に対する配慮に欠けてる作品が多いよね? 色でしか判断できない情報は基本NGだってデザイナーは学ぶべきだと思うんだ。ま、そんな事言っても私にも詳しいことは分からないんですが(^^;

あれ? 話がずれた。というわけで、効果テキストのタグの部分をどうするかって話。幸いにもエクセルはフォントカラーを弄れるので、赤字や青字をそのまま反映すれば良いでしょう。エクセルのデータを元に他のことをしようとすると面倒そうですが。

  • get_chaos_cardlist_2.rb
 require 'rubygems'
 require 'mechanize'

 agent = WWW::Mechanize.new
 os, no = /(\w+-)(\d+)/.match(ARGV[0]).to_a.values_at(1,2)

 list = []

 until agent.get("http://chaos-tcg.com/jsp/cardlist?cardno
=#{os}#{no}").search('table.status').empty?
   agent.page.links_with(:href=>/cardno/).map{|link|
     sleep 0.1
     card_page = link.click
     sleep 0.1

     no = /cardno=\w+-(\d+)/.match(card_page.uri.to_s).to_
a[1]

     array = []
     card = {}

     (card_page/'table.status td').map{|e| array << e.inne
r_html}

     name, kana = /(.+)<br><span class=\"kana\">(.+)<\/span
>/.match(array[1]).to_a.values_at(1,2)
     card[:name] = name
     card[:kana] = kana
     card[:num] = array[2]
     card[:sex] = array[3]
     card[:rarity] = array[4]
     card[:type] = array[5]
     card[:attribute] = array[6]
     card[:attack] = array[7]
     card[:defense] = array[8]
     card[:attack_diff] = array[9]
     card[:defense_diff] = array[10]
     card[:text] = array[11]
     card[:flavor] = array[12]
     card[:expansion] = array[13]
     card[:entry] = array[14]

     puts card[:num]

     list << card
   }
   no = sprintf('%03d', no.to_i + 1)
 end

 require 'win32ole'
 require 'jcode'
 require 'kconv'

 def getAbsolutePath filename
   fso = WIN32OLE.new('Scripting.FileSystemObject')
   return fso.GetAbsolutePathName(filename)
 end

 module WorkSheet
   def [] y,x
     cell = self.Cells.Item(y,x)
     v = cell.Value
     def v.cell= cell
       @cell = cell
     end
     v.cell = cell
     def v.method_missing(name,*args)
       @cell.__send__(name,*args)
     end
     return v
   end
   def []=(y, x, value)
     cell = self.Cells.Item y,x
     if cell.MergeCells
       cell.MergeArea.Item(1,1).Value = value
     else
       cell.Value = value
     end
   end
 end

 head = [
   "カードNo.",
   "カード名",
   "カナ",
   "種類",
   "性別",
   "属性",
   "レアリティ",
   "攻撃力",
   "攻撃力(補正)",
   "耐久力",
   "耐久力(補正)",
   "効果テキスト",
   "フレーバー",
   "エキスパンション",
   "参加作品"
 ]

 $KCODE = 's'
 xl = WIN32OLE.new('Excel.Application')

 begin
   book = xl.Workbooks.Add

   sheet = book.Worksheets.Item 1
   sheet.extend WorkSheet

   head.each_index{|i|
     sheet[2, i + 2] = head[i].kconv(Kconv::SJIS, Kconv::UT
F8)
   }

   y = 4

   list.each{|card|
     sheet[y, 2] = card[:num]
     sheet[y, 3] = card[:name].kconv(Kconv::SJIS, Kconv::UT
F8)
     sheet[y, 4] = card[:kana].kconv(Kconv::SJIS, Kconv::UT
F8)
     sheet[y, 5] = card[:type]
     sheet[y, 6] = card[:sex].kconv(Kconv::SJIS, Kconv::UTF
8)
     sheet[y, 7] = card[:attribute].kconv(Kconv::SJIS, Kcon
v::UTF8)
     sheet[y, 8] = card[:rarity]
     sheet[y, 9] = card[:attack]
     sheet[y, 10] =  "'#{card[:attack_diff]}"
     sheet[y, 11] =  card[:defense]
     sheet[y, 12] =  "'#{card[:defense_diff]}"

     card[:text] = card[:text].kconv(Kconv::SJIS, Kconv::UT
F8).gsub(/<br>/, "\n")
     blue = /<font color="blue">([^>]*)<\/font>/.match(card
[:text]).to_a[1]
     red = /<font color="red">([^>]*)<\/font> /.match(card[
:text]).to_a[1]
     card[:text] = card[:text].gsub(/<font color="(red|blue
)">/, "").gsub(/<\/font>/, "")

     sheet[y, 13] =  card[:text]

     if blue
       pos = Regexp.new("(.*)#{blue}",  Regexp::MULTILINE).
match(card[:text]).to_a[1].jlength
       len = blue.jlength
       sheet[y, 13].Characters(pos + 1, len).Font.ColorInde
x = 5
     end

     if red
       pos = Regexp.new("(.*)#{red}",  Regexp::MULTILINE).m
atch(card[:text]).to_a[1].jlength
       len = red.jlength
       sheet[y, 13].Characters(pos + 1, len).Font.ColorInde
x = 3
     end

     sheet[y, 14] =  card[:flavor].kconv(Kconv::SJIS, Kconv
::UTF8).gsub(/<br>/, "\n")
     sheet[y, 15] =  card[:expansion].kconv(Kconv::SJIS, Kc
onv::UTF8)
     sheet[y, 16] =  card[:entry].kconv(Kconv::SJIS, Kconv:
:UTF8).gsub(/<br>/, "\n")
     y += 1
   }

   filename = getAbsolutePath("#{list[0][:expansion].kconv(
Kconv::SJIS, Kconv::UTF8).gsub(/[:\.]/, '_')}.xls")
   book.SaveAs(filename)
 ensure
   book.Close
   xl.Quit
 end

横幅が収まらないので適当に改行しています。

生成したエクセルファイルのサンプルは以下。前回のサンプルは今回のものと置き換えています。

なお、AP-051(SR) 3つの願い「るーこ・きれいなそら」とAP-080 純真無垢「ユズハ」の効果テキストが足りない&ゴミが残ってるのは仕様です。公式のカードリストそのものが間違っているので。誰かブシロードに修正依頼でも投げてあげてください。

_ [ツインエンジェル][パチスロ]サントラ発売記念マイスロイベントだと!?

さつきちゃん誕生日の次は遥の誕生日とばかり思っていたのに……。

どこまで搾取すれば気がすむんだw

さていつホールに行こうか。←駄目人間

_ [D-0][TCG]日本選手権延期のおしらせ

まあ予想通りかな。場所が神戸ではなぁ。例え開催されても状況によっては行かないつもりだったし。

というわけで日曜の福岡行きの自由度は増えたよ>歌人氏

アイマスライブの大阪公演はどうなるんでしょうね?

本日のツッコミ(全1件) [ツッコミを入れる]
_ ひろゆ (2009年 05月18日(Mon) 18:32)

まぁしゃーないね^^;<br>延期って事なので、当面は場所と日程アナウンスに注意って感じかな。<br>招待状を持ってる人には個別で連絡が行くそうなので、早めに情報が来たら教えてくださいな。


Googleカスタム検索

my recommend books