k_ikiの雑記帳

DTPのこと、創作のことなど、思いつくまま

半角数字を全角に

rubyによるテキスト処理は久々。
リハビリがてら、過去にせうぞーさんから教わったものを。
今回は、Mac OSX10.6.8に標準でインストールされているruby1.8.7を利用。
 
目的は、テキスト中の半角数字をすべて全角数字に置換したい。
その際、メルアドやURLに含まれる数字は半角のままにしたい。
過去に教えていただいたときは、一桁は全角・二桁以上は半角に置換していたが、今回はすべて全角に。
 

#!usr/bin/ruby -Ku
=begin
・半角数字を全角数字に
・URLやメールアドレス中の数字はすべて半角に
=end

require "jcode"

def zen2han(num)
	num.tr!("0-9", "0-9")
	return num
end

while line = ARGF.gets 
	#いったん、数字をすべて全角に
	line.tr!("0-9", "0-9")
	#メルアドとURLに含まれる数字を半角へ戻し置換
	line.gsub!(/([0-90-9a-zA-Z_\#!$%&`'*+\-{|}~^\/=?\.]+@[0-90-9a-zA-Z_\#!$%&`'*+\-{|}~^\/=?\.]+)/) {zen2han($1)}
	line.gsub!(/(https?:\/\/[\(\)%#!\/0-90-9a-zA-Z_$@.&+-,'"*=;?:~-]+)/) {zen2han($1)}
	print line
end

 
使っているrubyのバージョンが1.9以上ならjcodeの行は不要。
まず、上記ソースコードを "han2zen.rb" などわかりやすい名前で保存しておく。
スクリプトファイルさえ出来れば、rubyでのテキスト変換は一瞬だ。
ターミナルを起動して、コマンドプロンプトruby と入力してスペースを入れる。
次に、上記のスクリプトファイルをドラッグ&ドロップ
続けて、変換元のテキストファイルをドラッグ&ドロップ
 
例としては、こんなの。

http://www.kstation2.blog10.fc2.com/

2.次の1〜10の中から問題文の内容に合うものを全て選び、記号で答えよ。
 1.○○○○
 2.●●●●
 3.△△△△
 4.□□□□
 5.■■■■
 6.☆☆☆☆
 7.★★★★
 8.◇◇◇◇
 9.◆◆◆◆
 10.▲▲▲

変換元と同じ階層に、変換後のファイルをリネームした状態で保存したければ、ファイルをリダイレクトしてやればいい。
具体的には、さきほどターミナルにドラッグ&ドロップしたファイル名に続けて半角不等号 > を入力してスペース。
最後に、もう一度変換元のテキストファイルをドラッグ&ドロップし、ファイル名末尾に "_new" などの文字列を追加してやれば、変換後の結果が新しいファイルにリダイレクトされる。
 
文章だけだと誤解を生みそうなので、絵的にはこんなイメージ。
マシン名とか消してるんで、不自然にスペース開いてるけど気にしないでください。
f:id:k_iki:20130704121016p:plain
上で説明したように、

  1. rubyと半角スペースを入力した後にスクリプトファイルをD&D
  2. 続けて変換元ファイルをD&Dして半角不等号+半角スペース
  3. 最後にもう一回変換元ファイルをD&Dしてファイル名だけ変更

こうすることで、置換結果が同じ階層のフォルダに新しいファイルとして保存される。
 
で、置換後のファイルの中身がこうなっていれば変換成功。

http://www.kstation2.blog10.fc2.com/

2.次の1〜10の中から問題文の内容に合うものを全て選び、記号で答えよ。
 1.○○○○
 2.●●●●
 3.△△△△
 4.□□□□
 5.■■■■
 6.☆☆☆☆
 7.★★★★
 8.◇◇◇◇
 9.◆◆◆◆
 10.▲▲▲