> こういうのは,としきさんにとっては我慢ならないところだと想像したりし
ところが、そんなに気にならなかったりします。
むしろ、私が我慢できないとは言わないまでも、ちょっといやだな、と思うのが、
例えば、絶対に00001という値を取りえない、なんて言うようなロジック。
一応ね、00000は別にして、00001から99999または65535のすべての値は取りえて
ほしいわけなんですよ。だから、前にも書いたけど、ハッシュ関数なんて大がか
りなことを思いついてしまったりしたわけで。
でもね、半角1文字のハンドル名だった場合にどうするか、というのは、最後の
段階でちょっとだけ悩んだんですよ。素直にやれば、2バイト目はヌルというか
0という値を入れてやればいいのですが、なんとなく、1バイト目と同じ値を重
ねてみたらどうか、などという事を考えてしまったのです。なぜそんな事を思い
ついたのか全く覚えていませんが、ゆっくり考えて、何にもメリットがないこと
がわかったので、素直な方式に落ち着きました。
結局、こんな方式になりました。
function name2id(str, tmp,i,x1,x2,result){
x1[1]=ord(substr(str,1,1))-32
if (length(str)>1){ x1[2]=ord(substr(str,2,1))-32 } else { x1[2]=0 }
tmp=x1[1]*256+x1[2]
x2[1]=int(tmp/(26*26))%26
x2[2]=int(tmp/26)%26
x2[3]=tmp%26
tmp=0
for (i=1;i<=length(str);i++){
tmp=(tmp*256+ord(substr(str,i,1))-32)%100000
}
x2[4]=int(tmp/10000)%10
x2[5]=int(tmp/1000)%10
x2[6]=int(tmp/100)%10
x2[7]=int(tmp/10)%10
x2[8]=tmp%10
result=sprintf("%c%c%c%1d%1d%1d%1d%1d",x2[1]+65,x2[2]+65,x2[3]+65,x2[4],x2[5],x2[6],x2[7],x2[8])
return result
}
まぁ、結局、文字コードで32を減算してしまっていますが。
これで、手元のDOSマシンでは、完璧に動くようになりました。
jgawkとgawkとgawkの3つの環境でね。
ところが、試しにサーバマシンのgawkで実行させてみたところ、jsubstr関数がな
い、などというエラーを吐いてくるのです。むぅ、同じバージョンだと思ったけ
ど、勘違いだったかな。ちょっと確認しなくては。
|