2015年4月1日水曜日

[android][Ruby]strings.xmlを一覧化する

すでにこことかここにありますが、Rubyの練習でnokogiriを使わずに書いてみました。
#strings.xmlからnameとvalueを抜き出してcsvにするスクリプト
unless ARGV[0]
puts "example: ruby xml_to_csv.rb strings.xml"
exit
end
AndroidStringStruct = Struct.new(:name, :value) {
def to_csvstring
name + ',' + value
end
}
OUTPUT_FILE = "output.csv".freeze
def array_to_csvstring(array)
array.inject("") {|memo, elem| memo + elem.to_csvstring + "\n"}
end
# <string name="app_name">アプリ名</string> を読み込んで、nameとvalueを抜き出して、csvを作る。
array = []
File.open(ARGV[0], 'r:utf-8') do |file|
file.each {|line|
if m = line.match(/<string name=\"(.+)\">(.+)<\/string>/)
array << AndroidStringStruct.new(m[1], m[2])
end
}
end
csv_string = array_to_csvstring(array)
# <string-array name="menu_names">形式
array = []
File.open(ARGV[0], 'r:utf-8') do |file|
name = nil
items = nil
file.each {|line|
if m = line.match(/<string-array name=\"(.+)\">/)
name = m[1]
items = []
end
if m = line.match(/<item>(.+)<\/item>/)
items << m[1]
end
if line.match(/<\/string-array>/)
array << AndroidStringStruct.new(name, items.join(' '))
name = nil
items = nil
end
}
end
csv_string += array_to_csvstring(array)
# 出力
output = ARGV[1] || OUTPUT_FILE
File.delete(output) if File.exist?(output)
File.open(output, 'w:sjis') { |file| file.write(csv_string) }
puts "=> #{output}"
view raw gistfile1.rb hosted with ❤ by GitHub


0 件のコメント:

コメントを投稿