[Q] toupperの使い方No.13380
yrk00770 さん 02/11/14 12:48
 
大文字に変換する toupper(もしくは、小文字に変換する tolower)の
使い方を教えて頂けないでしょうか。

toupper $a;

として、文字列変数 $a の中身を全て大文字にしたいのですが、エラーが
出てしまいます。

ヘルプ中の「その他のコマンド系文」には引数の使い方が書かれていない
もので、どうも理解ができておりません。

アドバイス頂ければ幸いです。宜しくお願いいたします。

[ ]
RE:13380 [Q] toupperの使い方No.13381
たけのこ さん 02/11/14 13:32
 
たけのこです。

toupper, tolowerは編集系の“文”なので、秀丸で開いて
いるテキストに対するコマンドになります。toupper“関
数”などは自前で用意することになりますが、こんなんで
どうでしょう?かなり手抜きですが。
  call str2upper $string;
などの様に呼ぶと大文字化された文字列が返ってきます。
全角も対象にするとか(toupperコマンド仕様)の場合も、
チョットいじるだけです。挑戦してみてください。



str2upper:
##len = strlen($$1);
##i = 0;
$$dest = "";
while(##i < ##len){
  ##cc = ascii(midstr($$1, ##i, 1));
  if((##cc >= 'a') && (##cc <= 'z')){
    ##cc = ##cc - 0x20;
  }
  $$dest = $$dest + char(##cc);
  ##i = ##i + 1;
}
return $$dest;

[ ]
RE:13381 [Q] toupperの使い方No.13383
ENCODINGSHIFTJIS さん 02/11/14 18:30
 
 変数での操作が多い書き方では田楽DLLなども便利です。

>toupper, tolowerは編集系の“文”なので、秀丸で開いて
>いるテキストに対するコマンドになります。
 MS-Office VBA のイメージでは  
ActiveDocument.Selection.toupper  ( 実際は UCase関数だが)

田楽DLLでは
例:
$s = dllfuncstr("TOUPPER","abcdef"); // $s == "ABCdef"
$s = dllfuncstr("TOUPPER2","abcdef"); // $s == "ABCDEF"

[ ]
RE:13380 [Q] toupperの使い方No.13387
ひろ さん 02/11/14 18:58
 
 yrk00770 さん今日は、ひろです。
> 大文字に変換する toupper(もしくは、小文字に変換する tolower)の
> 使い方を教えて頂けないでしょうか。
<中略>
> ヘルプ中の「その他のコマンド系文」には引数の使い方が書かれていない
> もので、どうも理解ができておりません。
 秀丸のマクロ・ヘルプは、(その書き方が良いかどうかは別にして) メニュー
から行える機能を再現する文は、詳しい説明が書かれていません。「大/小文
字に変換」も同様です。

 ここまで書くとお気づきかもしれませんが、toupper, tolower はどちらも
保存された文字列変数を変換するのではありません。あくまでウィンドウ上
で選択された文字列を変換する文です。

 そこで yrk00770 さんの行いたいことは、末尾のように大/小文字に変換す
るサブルーチンを用意し、それを呼び出すようにすればよいと思います。(た
だしキリル文字未対応)

 P.S マクロの内容に更に質問がある場合、
http://www.maruo.co.jp/hidesoft/4/
にお願いします。
//------------ 大/小文字に変換するサブルーチン使用サンプル ----------
call TOUPPER2 "azaz";
message $$return;
call TOLOWER2 $$return;
message $$return;
endmacro;

TOUPPER2://小文字を大文字に変換
  ##char=0x8281;
  while(##char<=0x829A){
    call ChangeCharacter $$1,char(##char),char(##char-0x21);
    $$1=$$return;
    ##char=##char+1;
  }
  call TOUPPER $$1;
  return $$return;

TOUPPER://小文字を大文字に変換 (半角文字のみ)
  ##char=0x61;
  while(##char<=0x7A){
    call ChangeCharacter $$1,char(##char),char(##char-0x20);
    $$1=$$return;
    ##char=##char+1;
  }return $$1;

TOLOWER2://大文字を小文字に変換
  ##char=0x8281;
  while(##char<=0x829A){
    call ChangeCharacter $$1,char(##char-0x21),char(##char);
    $$1=$$return;
    ##char=##char+1;
  }
  call TOLOWER $$1;
  return $$return;

TOLOWER://大文字を小文字に変換 (半角文字のみ)
  ##char=0x61;
  while(##char<=0x7A){
    call ChangeCharacter $$1,char(##char-0x20),char(##char);
    $$1=$$return;
    ##char=##char+1;
  }return $$1;

ChangeCharacter://buff 中の文字列を置換
//$$1:buffer
//$$2:検索文字列
//$$3:置換文字列
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:13380 ありがとうございました。([Q] No.13388
yrk00770 さん 02/11/14 19:16
 
たけのこ様、ENCODINGSHIFTJIS様、ひろ様

コメント並びにアドヴァイスありがとうございます。お恥ずかしな
がら、初心者なものでサブルーチンを使えることを初めて知りまし
た。また、田楽DLL なる存在も初めて知りました。

提示頂いたマクロのサンプルは時間をかけて読み解かないと、現時
点では今ひとつ理解できておりませんので、もう少し勉強してみま
す。また理解できませんでしたら投稿させて頂きます。

先ずは御礼まで。ありがとうございました。

[ ]