「半角数字を漢数字に変換」の版間の差分

提供: dococo wiki
ナビゲーションに移動 検索に移動
imported>Webmaster
(ページの作成:「 <syntaxhighlight lang="perl"> #!/usr/bin/perl #ソースファイルは UTF8形式で保存 use strict; use warnings; #内部処理はUTF-8で行うための宣言...」)
 
imported>Webmaster
 
(同じ利用者による、間の7版が非表示)
1行目: 1行目:
 +
windows7の標準入力から半角数字(アラビア数字)を入力すると漢数字に変換するプログラム<br />
 +
【修正ポイント】<br />
 +
*\1 better written as $1のエラーのため一部修正
 +
*Windows標準入出力に変更
 +
 +
参考:[http://lamium.blogspot.jp/2014/06/blog-post.html Sus scrofa liaodongensis]
 +
 +
入力例:東京都千代田区九段南2丁目 付近 (1)
 +
出力例:東京都千代田区九段南二丁目 付近 (一)
  
 
<syntaxhighlight lang="perl">
 
<syntaxhighlight lang="perl">
 
#!/usr/bin/perl
 
#!/usr/bin/perl
 
 
#ソースファイルは UTF8形式で保存
 
#ソースファイルは UTF8形式で保存
 
use strict;
 
use strict;

2015年12月31日 (木) 10:44時点における最新版

windows7の標準入力から半角数字(アラビア数字)を入力すると漢数字に変換するプログラム
【修正ポイント】

  • \1 better written as $1のエラーのため一部修正
  • Windows標準入出力に変更

参考:Sus scrofa liaodongensis

入力例:東京都千代田区九段南2丁目 付近 (1)
出力例:東京都千代田区九段南二丁目 付近 (一)
#!/usr/bin/perl
#ソースファイルは UTF8形式で保存
	use strict;
	use warnings;
	
	#内部処理はUTF-8で行うための宣言
	use utf8;
	use Encode;
		
	# windows標準はencoding(cp932)
	binmode STDOUT, ':encoding(cp932)'; #標準出力
	binmode STDERR, ':encoding(cp932)'; #標準エラー出力
	binmode STDIN, 	':encoding(cp932)';  #標準入出力

while (<>) {

  # 数字は半角にそろえておく
    y/1234567890/1234567890/;
  # 単独の0は「ゼロ」に書き換える
    s/(?<!\d)0(?!\d)/ゼロ/g; 
  # 桁区切りのコンマを取っておく
    s/(?<=\d),(?=(\d\d\d)+(?!\d))//g;
  # 4桁ごとに区切って万億兆を挿入
    s/(?<=\d)(?=\d\d\d\d(?!\d))/万/g;
    s/(?<=\d)(?=\d\d\d\d(?=万))/億/g;
    s/(?<=\d)(?=\d\d\d\d(?=億))/兆/g;
  # 下から1桁ずつ十百千を挿入
    s/(?<=\d)(?=\d(?!\d))/十/g;
    s/(?<=\d)(?=\d(?!\d))/百/g;
    s/(?<=\d)(?=\d(?!\d))/千/g;
  # 0になってる桁を削除
    s/0[十百千]//g;
    s/億0万/億/g;
    s/兆0億/兆/g;
    s/0//g;
  # 十百には1をつけない
     s/1([十百])/$1/g;
  # 各桁を漢数字に書き換え
    y/123456789/一二三四五六七八九/;

    print $_;
}