code の使い方を教えてくださいNo.09994
可愛村龍滋 さん 22/11/12 15:09
 
文書中の行頭の講師名を取得したいのです。が、「型」が違うというミスを指摘され
ました。「 ":" 」ではなく「 0x8146 」でも同様でした。正解はどうなるのでしょ
うか?

 文字列を取得して、「講師:」を減算する方法もあると考えたのですが、文字列を
取得する関数が分かりません。教えてください。

-.....
-.....
講師:鈴木順子
-.....
-.....


//Tname 講師名を取得
searchup"^講師:", regular;
golineend;
#cur_x2 = x;
#cur_y2 = y;
while(1){
 left;
 if(result == 1){
  if(code == ":"){
   right;
   #cur_x1 = x;
   break;
  }
 }
 }
$Tname = gettext(#cur_x1,#cur_y2,#cur_x2,#cur_y2);

[ ]
RE:09994 code の使い方を教えてくださいNo.09995
Iranoan さん 22/11/12 16:10
 
可愛村龍滋さんこんにちは Iranoan です
> 文書中の行頭の講師名を取得したいのです。が、「型」が違うというミスを指摘さ
>れました。「 ":" 」ではなく「 0x8146 」でも同様でした。正解はどうなるので
>しょうか?
判定前に
> golineend;
で行末に移動しているのが一番大きな原因です
moveto foundtopx, foundtopy;
といった要領で、検索にヒットした範囲の最後に移動する必要があるでしょう

また「"」で挟むと文字列になります
秀丸マクロでは C 言語などと同じく、文字列と文字は別の型なので
  if(code == ':'){
と「'」で挟み、文字扱いにすれば code を使いつつ可読性も下げずにで判定できます

なお今回の場合は、前方一致の正規表現を使ってやれば、次の様にもっと処理をシン
プルにできます
//----------------------------------------------------------------------
setcompatiblemode 0x00020000; //←検索条件をマクロ内で変えない
searchup"(?<=^講師:).+", regular;
$Tname = gettext(foundtopx, foundtopy, foundendx, foundendy);
message $Tname;

[ ]
RE:09995 code の使い方を教えてくださいNo.09996
可愛村龍滋 さん 22/11/14 07:19
 
ありがとうございます。型が違うということが分かりました。正規表現を利用すると、
算数と数学との解法の違いを感じます。マクロ初心者ですが勉強していきます。

[ ]