十六進数で答えが返って来な〜い(ioi)。
ええと……昨日のメモに書いた
tcha っちゃ
を
74,63,68,61,3D,82,C1,82,BF,82,B1,\ t c h a = [っ] [ち] [ゃ]
へと変換するスクリプトを組みたかったのですが、そもそも「文字→16進数」の変換部分ですっかり頓挫しています。
外で見直すつもりなので、とりあえず貼ってみます。
jgawkに喰わせるテキストはこんな感じ。
ca か tcha っちゃ
jgawkに喰わせるソースはこんな感じ。
BEGINもENDも無く、テキストの行ごとにこの処理を繰り返します。
コピペ&コメント&コメントアウト多数なのは……クセなので気にしないでくださいorz
{ /* ↓廃棄コード */ /* print $0; */ /* print $0,$1,$2; */ /* ↑廃棄コード */ /* $1; 行内において、一つめのレコードを読む。 */ _AsciiChara = $1; /* print "_AsciiChara=",_AsciiChara; */ /* $2; 行内において、二つめのレコードを読む。 */ _SjisChara = $2; /* print "_SjisChara=",_SjisChara; */ /* 一つめのレコード(ASCII綴り)長さについて、二バイト文字を考慮し数える。 */ _AsciiJLength = jlength(_AsciiChara); /* print "jlength(_AsciiLength)=",_AsciiJLength; */ /* 二つめめのレコード(SJISかな)長さについて、二バイト文字を考慮し数える。 */ _SjisJLength = jlength(_SjisChara); /* print "jlength(_SjisLength)=",_SjisJLength; */ /* 一つめのレコード(ASCII綴り)長さについて、二バイト文字を考慮せずに数える。 */ _AsciiLength = length(_AsciiChara); /* print "length(_AsciiLength)=",_AsciiLength; */ /* 二つめめのレコード(SJISかな)長さについて、二バイト文字を考慮せずに数える。 */ _SjisLength = length(_SjisChara); /* print "length(_SjisLength)=",_SjisLength; */ /* 一つめのレコード(ASCII綴り)長さについて、二バイト文字を考慮し順次出力する。 */ /* for(i=1;i<=_AsciiLength;i++){ */ /* printf("%s " ,jsubstr(_AsciiChara, i, 1)+0 ); */ /* print "→",i; */ /* } */ /* 二つめめのレコード(SJISかな)長さについて、二バイト文字を考慮し順次出力する。 */ /* for(i=1;i<=_SjisLength;i++){ */ /* printf("%s " ,jsubstr(_SjisChara, i, 1)+0 ); */ /* print "→",i; */ /* } */ /* 一つめのレコード(ASCII綴り)長さについて、二バイト文字を考慮せず順次出力する。 */ for(i=1;i<=_AsciiLength;i++){ printf("%s " ,substr(_AsciiChara, i, 1) ); /* +0 */ print "→",i; } /* 二つめめのレコード(SJISかな)長さについて、二バイト文字を考慮せず順次出力する。 */ for(i=1;i<=_SjisLength;i++){ printf("%X " ,substr(_SjisChara, i, 1) ); /* +0 */ print "→",i; } }
出力結果はこんな感じ。
C:\>jgawk -f tikan.awk tikan.txt c → 1 ※"%s " a → 2 0 → 1 ※"%X " 0 → 2 t → 1 ※"%s " c → 2 h → 3 a → 4 0 → 1 ※"%X " 0 → 2 0 → 3 0 → 4 0 → 5 0 → 6 C:\>
単に"%X " をつけてやれば大丈夫なのかなぁ……と思ってやってみたのですが、見事に失敗してしまいました。
ついでに「substr(_AsciiChara, i, 1) +0」にすれば数字になるのかなぁ……と思ってやってみたのですが、こちらも見事に無駄足に。
うーん、何が間違っているのやら……。
ええ、思いっきり「整形以前」の問題ですともorz