This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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}" |
0 件のコメント:
コメントを投稿