カーソル位置の文字列取得方法?No.09570
tok さん 21/09/10 12:28
 
郵便番号
住所
氏名
電話番号

という形式のデータがあって
先頭から氏名の行までの[3]行をカーソル移動コマンドを使用して
コピペして処理していました。

ところが

郵便番号
住所1
住所2
氏名
電話番号

というデータになると対応できません。
カーソル移動させてカーソル位置の"電話番号"という文字列を
判定させる必要がある訳ですが
ヘルプで見ても適切な関数が分かりません

どなたかご教示いただけないでしょうか
よろしくお願いします。



[ ]
RE:09570 カーソル位置の文字列取得方法?No.09571
でるもんたいいじま さん 21/09/10 12:50
 
こんにちは。秀丸愛用者の「でるもんた・いいじま」です。

> 郵便番号
> 住所
> 氏名
> 電話番号
>
> という形式のデータがあって
...
> ところが
>
> 郵便番号
> 住所1
> 住所2
> 氏名
> 電話番号
>
> というデータになると対応できません。
> カーソル移動させてカーソル位置の"電話番号"という文字列を
> 判定させる必要がある訳ですが

データが行単位になっているのなら、1行ずつ順番にコピーして変数に格納していけ
ばいいはずです。C言語とかPerlやPythonとかでも一般的な方法ですし、この方法な
らたとえば住所と氏名の順序が入れ替わっていたりしても対応できます。

必ずしも行単位でないが順序は固定である、ということであれば、finddownで "電話
番号" というキーワードを検索するのがいいと思います。あるいは、ここの部分に本
当に番号だけが 03(1234)5678 とか +1-800-1234-5678 のように書いてあるのだとし
たら finddown @"^[0-9\(\)\-\+]{9,}",regular; といった具合に正規表現で検索す
ることになると思います。

[ ]
RE:09570 カーソル位置の文字列取得方法?No.09573
おすぎ さん 21/09/10 13:28
 
おすぎです。

カーソル位置の文字コードは code で取得できます。

「電」の文字コードは 37732 です。

if(code == 37732) message "カーソルは「電話番号」にいます";
みたいに使えます。

[ ]
RE:09571 カーソル位置の文字列取得方法?No.09574
tok さん 21/09/10 14:21
 
>こんにちは。秀丸愛用者の「でるもんた・いいじま」です。
>
>> 郵便番号
>> 住所
>> 氏名
>> 電話番号
>>
>> という形式のデータがあって
>...
>> ところが
>>
>> 郵便番号
>> 住所1
>> 住所2
>> 氏名
>> 電話番号
>>
>> というデータになると対応できません。
>> カーソル移動させてカーソル位置の"電話番号"という文字列を
>> 判定させる必要がある訳ですが
>
>データが行単位になっているのなら、1行ずつ順番にコピーして変数に格納していけ
>ばいいはずです。C言語とかPerlやPythonとかでも一般的な方法ですし、この方法な
>らたとえば住所と氏名の順序が入れ替わっていたりしても対応できます。
>
>必ずしも行単位でないが順序は固定である、ということであれば、finddownで "電
>話番号" というキーワードを検索するのがいいと思います。あるいは、ここの部分
>に本当に番号だけが 03(1234)5678 とか +1-800-1234-5678 のように書いてあるの
>だとしたら finddown @"^[0-9\(\)\-\+]{9,}",regular; といった具合に正規表現で
>検索することになると思います。

すみません、まったく初心者なものでちょっとついていけません。

作業させていたことですが

郵便番号   ;実文字が来ます
住所     ;実文字が来ます
氏名    ;実文字が来ます
"電話番号"  ;固定文字です

というデータを

gofiletop;
beginsel;
down 3;
copy;

として処理していました

しかし、住所の文字列が長い場合には自分で分割して

郵便番号   ;実文字が来ます
住所1    ;実文字が来ます
住所2    ;実文字が来ます
氏名    ;実文字が来ます
"電話番号"  ;固定文字です

としたいのです

この場合は上のマクロ文は
down 3; ではなく
down 4; となっている必要があるので

それを調べるため

gofiletop;
down 3;
if(カーソル文字列=="電話番号")
  downct=3;
else
  downct=4;

としてあらかじめダウンする数値を取得しておき
gofiletop;
beginsel;
down downct;
copy;

として処理できるのであれば
自分として一番理解しやすいのです。

3とか4とかのリテラル文字を使うのはまずいのですが、
徐々に進めています。

なお、マクロではまだ変数などを扱ったことがないので
上のマクロはエラーがあると思ってます

よろしくお願いします。

[ ]
RE:09573 カーソル位置の文字列取得方法?No.09575
tok さん 21/09/10 14:34
 
>おすぎです。
> ......
>みたいに使えます。

ありがとうございます

厳密にやると
if(code == 電のcode37732)
   right;
      if(code == 話のcode)
       right;
         if(code == 番のcode)
          right;
             if(code == 号のcode)
 
       

というようなことになるのでしょうか

カーソル位置以降の文字列を返す関数があるとありがたいですね。
マクロでそういうのってどなたか作成されてないでしょうか

初心者が勝手なことを言ってすみません。

[ ]
RE:09575 カーソル位置の文字列取得方法?No.09576
秀まるお2 さん 21/09/10 15:28
 
 カーソル位置移行の文字列を比較するのは以下のようなやり方がいいと思います。

     $s = gettext( x, y, x + 100, y );      //適当に100バイト分
     if( leftstr( $s, 8 ) == "郵便番号" ) {     //8バイト(=全角4文字分比較)
         message "郵便番号";
     } else if( leftstr( $s, 6 ) == "住所1" ) {    //6バイト = 全角3文字分比較
         message "住所1";
     } else if( leftstr( $s, 6 ) == "住所2" ) {
         message "住所2";
     } else if( leftstr( $s, 4 ) == "氏名" ) {
         message "氏名";
     } else if( leftstr( $s, 8 ) == "電話番号" ) {
         message "電話番号";
     }

 カーソル位置じゃなくて、カーソルの位置する行の行頭から取得するように、

     $s = gettext( 0, y, 100, y );

 みたいにしてもいいと思います。

[ ]
RE:09576 カーソル位置の文字列取得方法?No.09577
tok さん 21/09/10 18:11
 
> カーソル位置移行の文字列を比較するのは以下のようなやり方がいいと思います。
> ......
> みたいにしてもいいと思います。

ありがとうございます。
参考にさせていただきます。

お付き合いいただいたみなさんに感謝します。
3とか4とか使わないようにして汎用性?のあるものにしてみたいと思います。




[ ]
RE:09577 カーソル位置の文字列取得方法?No.09578
tok さん 21/09/11 09:56
 
>> カーソル位置移行の文字列を比較するのは以下のようなやり方がいいと思います。
> ......
>
報告
以下のように"電話番号"という固定文字をアクセスして
処理するようにしました。

解決です。
ありがとうございました。

 down ;      //
 $s = gettext( 0, y, 8, y );
 while ($s != "電話番号"){
  down ;      //
  $s = gettext( 0, y, 8, y );
 }

[ ]