文字コードの合計を取得したいNo.10429
おすぎ さん 24/07/02 12:47
 
お世話様です。

選択した文字列の文字コードを合計したいと思っています。
全角文字が混じった場合にどうすれば良いのか分かりません。

半角文字だけの場合のマクロは作ってみました。
#chara_code_total = 0;
#char_num = 0;
while(1){
$chara[#char_num] = midstr($word, #char_num, 1);
if($chara[#char_num] == "") break;
#chara_code[#char_num] = ascii($chara[#char_num]);
#chara_code_total = #chara_code_total + #chara_code[#char_num] ;
#char_num = #char_num + 1;
}

ご指南、よろしくお願いします。


[ ]
RE:10429 文字コードの合計を取得したいNo.10430
Iranoan さん 24/07/02 14:47
 
おすぎさんこんにちは Iranoan です
> 選択した文字列の文字コードを合計したいと思っています。
> 全角文字が混じった場合にどうすれば良いのか分かりません。
>
> 半角文字だけの場合のマクロは作ってみました。
> #chara_code_total = 0;
> #char_num = 0;
> while(1){
> $chara[#char_num] = midstr($word, #char_num, 1);
> if($chara[#char_num] == "") break;
> #chara_code[#char_num] = ascii($chara[#char_num]);
> #chara_code_total = #chara_code_total + #chara_code[#char_num] ;
> #char_num = #char_num + 1;
> }
マクロ・ヘルプを見ましたか?
何のためにその値を計算したいのか? が不明なので、見当違いかもしれませんがマク
ロ・ヘルプに有る通り ascii() の返り値で判断するか、unicode() を使えば良いと
思うのですが

[ ]
RE:10430 文字コードの合計を取得したいNo.10431
おすぎ さん 24/07/02 15:10
 
Iranoan さん

ありがとうございます

文字列の文字コードの合計値を得たい理由は、
手持ちの用語を用語集DBの中で検索するのに、
文字コードの合計値で検索したいと思っているからです。
(その方が検索が早くできる)

マクロヘルプを見ましたが、よく分かりません。
「scii() の返り値で判断する」というのは具体的にどういうことでしょうか?

ヘルプの「Unicode独自の文字の場合は、半角幅相当の場合は「?」と同じ0x3Fを
返します」の箇所のことでしょうか?


>マクロ・ヘルプを見ましたか?
>何のためにその値を計算したいのか? が不明なので、見当違いかもしれませんがマク
>ロ・ヘルプに有る通り ascii() の返り値で判断するか、unicode() を使えば良いと思
>うのですが

[ ]
RE:10431 文字コードの合計を取得したいNo.10432
Iranoan さん 24/07/02 17:14
 
おすぎさんこんにちは Iranoan です
> ヘルプの「Unicode独自の文字の場合は、半角幅相当の場合は「?」と同じ0x3Fを
> 返します」の箇所のことでしょうか?
はい
お手元の DB がどういったものかわかりませんが、
> >unicode() を使えば良いと思
> >うのですが
ではダメ?

[ ]
RE:10432 文字コードの合計を取得したいNo.10433
おすぎ さん 24/07/02 17:47
 
Iranoan さん

話が噛み合っていないかもしれないので整理しますと。

以下のマクロで、midstr は、半角は1文字、全角は2文字として数えます。

なので、
midstr で 1文字づつ読んで、ascii() で文字コードを得ようとすると、
半角は問題ないですが、
全角は中途半端に読むので、正しい文字コードが得られません。

逆に、
midstr で 2文字づつ読んで、ascii() で文字コードを得ようとすると、
全角は問題ないですが、
半角は2文字読んで最初の1文字しか文字コードが得られません。

半角・全角が混合した文字列で、半角と全角の両方の文字コードを得たいです。
これが私の質問なんですが。。。


#chara_code_total = 0;
#char_num = 0;
while(1){
$chara[#char_num] = midstr($word, #char_num, 1);
if($chara[#char_num] == "") break;
#chara_code[#char_num] = ascii($chara[#char_num]);
#chara_code_total = #chara_code_total + #chara_code[#char_num] ;
#char_num = #char_num + 1;
}


>おすぎさんこんにちは Iranoan です
>> ヘルプの「Unicode独自の文字の場合は、半角幅相当の場合は「?」と同じ0x3Fを
>> 返します」の箇所のことでしょうか?
>はい
>お手元の DB がどういったものかわかりませんが、
>> >unicode() を使えば良いと思
>> >うのですが
>ではダメ?

[ ]
RE:10433 文字コードの合計を取得したいNo.10434
Iranoan さん 24/07/02 18:25
 
おすぎさんこんにちは Iranoan です
> 以下のマクロで、midstr は、半角は1文字、全角は2文字として数えます。
>
> なので、
> midstr で 1文字づつ読んで、ascii() で文字コードを得ようとすると、
> 半角は問題ないですが、
> 全角は中途半端に読むので、正しい文字コードが得られません。
ascii()/unicode() を使うにしろ
> >> ヘルプの「Unicode独自の文字の場合は、半角幅相当の場合は「?」と同じ0x3Fを
> >> 返します」の箇所のことでしょうか?
を利用するにしろ、midstr() との処理を逆にすればよいのでは?

ascii()/unicode() どちらも「先頭の1文字だけを見ます」
これで文字コードを得てから midstr() を使って切り出せば、全半角どちらに対応で
きますよね
ASCII 範囲外の文字をどう扱うのか不明なので、Shift-JIS 範囲しか考慮していない
 ascii() を使った場合だと次の要領です
//----------------------------------------------------------------------
$word = "aあbい";

while(1){
 #code = ascii($word);
 #sum = #sum + #code;
  //↓秀丸の全半角の範囲も知らないので、おそらく修正の必要が有る
 if( #code <= 0xFF )$word = midstr($word, 1);
 else $word = midstr($word, 2);
 if( $word == "")break;
}
message hex(#sum);

[ ]
RE:10433 文字コードの合計を取得したいNo.10435
igus さん 24/07/02 20:14
 
//選択した文字の文字コード足すよ.mac

$word=getselectedtext();
#c=split($chara,$word,"");
#char_num=0;
while(1){
  if($chara[#char_num]=="")break;
  #chara_code[#char_num] = ascii($chara[#char_num]);
  #chara_code_total = #chara_code_total + #chara_code[#char_num] ;
  message $chara[#char_num]+"/"+str(#chara_code[#char_num])+"/"+
    str(#chara_code_total);
  #char_num=#char_num+1;
}
endmacro;

[ ]
RE:10434 文字コードの合計を取得したいNo.10436
おすぎ さん 24/07/03 08:59
 
Iranoan さん

ありがとうございます。

私が最初に提示したマクロと全然違う発想のマクロだったんですね。
だから、Iranoan さんの言ってることが全然分からなかった(^^;
勉強になります。ありがとうございました。

>$word = "aあbい";
>while(1){
> #code = ascii($word);
> #sum = #sum + #code;
>  //↓秀丸の全半角の範囲も知らないので、おそらく修正の必要が有る
> if( #code <= 0xFF )$word = midstr($word, 1);
> else $word = midstr($word, 2);
> if( $word == "")break;
>}
>message hex(#sum);


*秀丸担当さまにお願いです。
ascii()、unicode()のヘルプ文を
「先頭の1文字だけを見ます」→
「先頭の1文字だけ(半角でも全角でも)を見ます」のように加筆していただけ
ないでしょうか?

ソフトウェア業界の方々には当然の事なのかもしれませんが、私のような門外漢
(本業は翻訳者です)には、理解しにくいです。よろしくお願いいたします。

[ ]
RE:10435 文字コードの合計を取得したいNo.10437
おすぎ さん 24/07/03 09:01
 
igus さん

なるほど、split()を使えばできますね。
気がつきませんでした。
ありがとうございました。

>$word=getselectedtext();
>#c=split($chara,$word,"");
>#char_num=0;
>while(1){
>  if($chara[#char_num]=="")break;
>  #chara_code[#char_num] = ascii($chara[#char_num]);
>  #chara_code_total = #chara_code_total + #chara_code[#char_num] ;
>  message $chara[#char_num]+"/"+str(#chara_code[#char_num])+"/"+
>    str(#chara_code_total);
>  #char_num=#char_num+1;
>}
>endmacro;

[ ]
RE:10436 文字コードの合計を取得したいNo.10441
おすぎ さん 24/07/05 08:47
 
*秀丸担当さまにお願いです。

ascii()、unicode()のヘルプ文を
「先頭の1文字だけを見ます」→
「先頭の1文字だけ(半角でも全角でも)を見ます」のように加筆していただけ
ないでしょうか?

ソフトウェア業界の方々には当然の事なのかもしれませんが、私のような門外漢
(本業は翻訳者です)には、理解しにくいです。よろしくお願いいたします。

[ ]
RE:10441 文字コードの合計を取得したいNo.10442
秀丸担当 さん 24/07/05 09:50
 
返事が遅れて申し訳ありません。
ヘルプにそのように追記しておこうと思います。

[ ]