mieki256's diary



2016/10/23() [n年前の日記]

#1 [cg_tools] StylePixの日本語言語ファイルをそこそこ修正

少なくとも、メニュー項目の中に「出口」「作物」「地域」等の怪しい訳は無くなった…と思うので、一応置いておくのです。まだ怪しいところが残ってるけど、目立つところは直せたはず。 *1

_Jp_m256_20161023_txt.zip (StylePix 1.14.5.0 用)

Languageフォルダに入れて StylePix を起動すれば、オプションから言語を切り替えて使える。ファイル名が言語名として扱われるようで。

ちなみに、StylePix 2.0.0.5 の言語ファイルは、1.14.5.0 より微妙に項目数が増えていて、その増えた分が Japanese.txt に反映されてないように見えた。

チェック作業に使ったRubyスクリプト。 :

StylePix の言語ファイルを読み込んで、CSVファイルとして出力するRubyスクリプトを書いた。出力された CSV を、Excel や LibreOffice Calc 等で開けば視認性が良くなるので、抜けがないかチェックしやすくなる。というか抜けてるところだけリストアップするスクリプトにしたほうがいいのかもしれないけど。

動作確認環境は、Windows10 x64 + Ruby 2.2.5 p319。

使い方は、Languageフォルダの中に id_dump.rb を置いて、ruby id_dump.rb と打って実行。__tmp.csv が出力される。出力内容には、英語、日本語(オリジナル)、日本語(修正版)だけを並べている。

ちなみに、言語化ファイル群の中にはハングル文字で書かれたファイルがあるけど、そのままだとアクセスすらできないだろうから、そのファイルだけkorean.txt にリネームしてから作業した。

_id_dump.rb
# StylePix Language file check.
# output __tmp.csv (UTF-16LE + BOM)

output_file = "__tmp.csv"

# StylePix Language files
filelist = [
  'English.txt',
  'Japanese.txt',
  'Jp_m256_20161023.txt',
  'Arabic.txt',
  'ChineseSimplified.txt',
  'ChineseTraditional.txt',
  'French.txt',
  'German.txt',
  'Italian.txt',
  'Welsh.txt',
  'korean.txt', # please rename
]

# pickup language files
pickuplist = [
  'English.txt',
  'Japanese.txt',
  'Jp_m256_20161023.txt',
]

# UTF-16LE string
re_comment = Regexp.new( '^\/\/'.to_s.encode( "UTF-16LE" ))
re_blankline = Regexp.new( '^\s+$'.to_s.encode( "UTF-16LE" ))
re_word_tab_word = Regexp.new( '^(\S+)\s+\"(.+)\"$'.to_s.encode( "UTF-16LE" ))
re_start_quot = Regexp.new( '^"'.to_s.encode( "UTF-16LE" ))
re_end_quot = Regexp.new( '\"$'.to_s.encode( "UTF-16LE" ))
nullstr = "".encode("UTF-16LE")
sep = "\t".encode("UTF-16LE")

# File read
data = {}
id_lst = {}
filelist.each do |fn|
  dt = {}
  f = File.open(fn, 'rb:BOM|UTF-16LE')
  while l = f.gets
    l.chomp!
    next if l =~ re_comment # skip comment
    next if l =~ re_blankline # skip blank line
    if l =~ re_word_tab_word
      id, value = $1, $2
      dt[id] = value
      if id_lst.has_key?(id)
        id_lst[id] += 1
      else
        id_lst[id] = 1
      end
    end
  end
  f.close
  data[fn] = dt
end

# make csv
res = []
header = []
header.push("ID".encode("UTF-16LE"))
pickuplist.each do |fn|
  header.push(fn.encode("UTF-16LE"))
end
res.push(header)

id_lst.keys.each do |id|
  dt = []
  dt.push(id)
  pickuplist.each do |fn|
    v = data[fn]
    dt.push((v.has_key?(id))? v[id] : nullstr)
  end
  res.push(dt)
end

# output csv (UTF-16LE + BOM)
f = open(output_file, 'wb:UTF-16LE')
f.write "\uFEFF"  # BOM
res.each do |l|
  f.puts l.join(sep)
end
f.close

Excel や LibreOffice Calc に渡す CSV は、UTF-16LE + BOM じゃないといかんらしいので、スクリプト内でやたらと encode("UTF-16LE") を呼んでいたり。

一応、出力されたCSVも置いてみたりして。

___tmp_csv.zip

余談。StylePixの動作がちょっと怪しい気がする。 :

StylePix起動時の動作が、なんだかちょっと怪しい感じがする。OS起動直後に起動する分には素早く起動してくれるけど、何度か StylePix の終了と起動を繰り返しているうちに、デスクトップ画面全体を巻き込んで、しばらく操作できない場面が出てくる…。一体何が起きてるんだろう…。ちなみに環境は Windows10 x64。

余談その2。StylePix 2.xの起動は遅い。 :

StylePix 1.x は起動が比較的早いけど、2.x はめっきり起動が遅い感じで。

ただ、起動と終了を何度も繰り返した状況で確認したので、インストールした直後なら起動が早かったりするのかもしれないけど、そこまで確認していない。

2016/10/28追記。 :

最初は txt ファイルを置いていたのだけど、サーバにアップロードしてみたら途中で切れてた…。zipファイルにして置き直したり。

*1: 公式のソレに反映してもらえたらいいのだけど、自分、英語が全く分からんから交渉しようもなく。

#2 [ruby] Ruby でUTF-16LEのテキストファイルにアクセス

せっかくテストしたのでメモ。動作確認環境は、Windows10 x64 + Ruby 2.2.5 p319。

テストに使った UTF-16LE のテキストは以下。

_text_utf16le_bom.txt

読み込み。 :

まずは読み込んでみる。

_open_utf16le.rb
# UTF-16LE + BOM のテキストファイルにアクセス

infile = "text_utf16le_bom.txt"

File.open(infile, 'rb:BOM|UTF-16LE') {|f|
  while l = f.gets
    l.chomp!
    puts l.encoding # => UTF-16LE
  end
}
  • File.open() に 'rb:BOM|UTF-16LE' を指定すれば UTF-16LE + BOM として開ける。
  • さらに、gets で読み込めば、 string が UTF-16LE として扱われる。
  • フツーは、ファイルを開いたら close で閉じないといけないが、File.open() にブロック({ } とか do end とか)をつけた場合は close を省略できる。

結果。
> open_utf16le.rb
UTF-16LE
UTF-16LE
UTF-16LE
UTF-16LE
UTF-16LE
UTF-16LE
UTF-16LE
UTF-16LE
「文字列(String)のタイプは UTF-16LEだよ」と表示された。

正規表現。 :

UTF-16LE + BOM の文字列に対して正規表現を使う例。

_open_utf16le_regexp.rb
# UTF-16LE + BOM の文字列に対して正規表現を使う

infile = "text_utf16le_bom.txt"

re0 = Regexp.new( '^\/\/'.to_s.encode("UTF-16LE") )
re1 = Regexp.new( '^(.+)\t(.+)$'.to_s.encode("UTF-16LE") )

f = File.open(infile, 'rb:BOM|UTF-16LE')
while l = f.gets
  if l =~ re0
    puts "comment"
  elsif l =~ re1
    puts "data"
  end
end
f.close
ソースコードの文字コード(この場合はUTF-8)、とは異なっている文字コードの文字列(UTF-16LE)に対して正規表現を使いたい場合、Regexp.new() を使う。いつもの調子で l =~ /^(.+)/ とか書いてしまうと UTF-16LE と UTF-8 が混在してるので「おいコラ、違う文字コードが混ざってるぞ」と怒られる

結果。
> open_utf16le_regexp.rb
comment
comment
data
data
comment
comment
data
data
UTF-16LEの文字列に対して正規表現を使って判別処理ができてる。

書き込み。 :

UTF-16LE + BOM でテキストファイルを出力してみる。

_output_utf16le.rb
# UTF-16LE + BOM の文字列をテキストファイルとして出力

outfile = "_tmp.txt"

File.open(outfile, 'wb:UTF-16LE') { |f|
  f.write "\uFEFF"  # BOMを出力
  DATA.each do |l|
    f.puts l.encode("UTF-16LE")
  end
}

__END__
ABCDEFG
0123456
日本語を記述
  • f = open(outfile, 'wb:UTF-16LE') で、UTF-16LE で出力できる。
  • f.write "\uFEFF" で、BOMを出力。
  • DATA.each {|l| puts l } を使えば、__END__ 以降に書かれた文字列を1行ずつ読み込める。

参考ページ。 :

#3 [windows] やっぱりWindows10がスリープから復帰できない

NVIDIA GeForecドライバが何度か更新されたので、実は GTX 750 Ti のドライバも少しは中身が変わっているのではと期待してしまって。Windows10 をスリープさせて復帰させようと試してみたところ、やっぱりスリープ復帰に失敗してブルースクリーンに。DPC_WATCHDOG_VIOLATION と表示されてる…。

GTX 750 Ti は、スリープ関連については、もうダメかもしれん。省電力化を進めたことで不具合を起こすようになってしまったんだろう…。もっとも、Windows7時代の古いドライバなら一応スリープ復帰できていたので、ドライバ側で行える回避策があるのだろうけど…。

#4 [anime] ウルトラマンオーブ、べリアルさんの回

怪獣を倒すためとは言え、 街をガンガン破壊するウルトラマン…。イイな…。 ビルを引き抜いて怪獣をタコ殴りしたり、 八つ裂き光輪で怪獣の尻尾を切断した上にその 尻尾を凶器代わりにしてタコ殴りしたり。ウルトラマンは正義のヒーロー、という思い込みがあるので、乱暴なソレは見ていてクラクラしてきて、なんだかイイ感じ。もっともこのへん進めていくと、平成ライダーのようなギスギスシリーズになって差別化が難しい気もするけど。たまにはこういうのもいいよなと。

まあ、劇場版その他ではべリアルさんがそういう役として活躍してる印象もあるのでアレですが。

以上、1 日分です。

過去ログ表示

Prev - 2016/10 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project