(発言者削除)No.03504
Koryan さん 02/12/05 19:39
 


[ ]
RE:03504 searchdown でヒットした文字列No.03505
encodingshiftjis さん 02/12/05 23:14
 
問題文が完全に理解できなかったので、

全置換
 [^0-9]+
 ,

で数字以外をカンマに置換ではから。

[ ]
RE:03505 searchdown でヒットした文字列No.03507
Koryan さん 02/12/06 15:01
 
すいません。まちがって元の文章を削除してしまいました。
でも続かせていただきます。

>全置換
> [^0-9]+

なるほど、たしかにこの方法は今回の私の例では素早いかもしれません。

ただ、今回のはたまたま例として簡単なのを挙げただけですが、通常はもっと複雑な
正規表現でマッチさせなくてはならないので、マッチしない正規表現を考えなくては
ならないというのはちょっと骨が折れます。

それから、他の部分がコンマなどに置換されてしまうと次の置換操作や検索操作がで
きなくなるのではないでしょうか。

できれば、マッチした文字列を変数や数列に代入する構文を考えたいと思うのですが
…。

こんな感じのマクロにしたいと思ってます。

$str = "XXXXXX"; // マッチパターン

#i = 0;

while ( 1 ) {

    seachdown2 $str,regular;
    if ( !result ) break;
   
    //ここでここでマッチした文字列を取得。
    XXXXXXXXXXXXXXXXXXXXXX;
    XXXXXXXXXXXXXXXXXXXXXX;
              ・
              ・
              ・
    //取得完了

    $s[#i] = XXXXXXXX; //取得した変数を数列に代入
   
    #i = #i + 1;
}

このようにして、取得したマッチ文字列を配列としてしまえば
あとはいろいろ再利用できるのではないかと思うわけです。

もし不可能であればあきらめるのですが…。

今回私が仕方なくやったのは、マッチした文字列の後ろに改行を加えて置換し、これ
によって golineend でマッチした文字列の最後尾まで選択してコピーするというも
のです。

こんな感じです。

replacedown "XXXXXX\\f","\\0\\n",regular;
beginsel;
golineend;
copy;
down;
golinetop;
backspace; //挿入した改行をもとにもどす。

あとは、前項のようにループさせてgetclipboardを使ってまた数列に順次代入して行
くというものです。

これでも何とかなるのですが、でもまだもっとスマートな方法がないかと思うのです。
というわけで、また助言の程よろしくお願いします。

[ ]
RE:03507 searchdown でヒットした文字列No.03508
山紫水明 さん 02/12/06 23:02
 
 Koryanさん,こんばんは。

》できれば、マッチした文字列を変数や数列に代入する構文を考えたいと思うので
》すが

 次のようなのでいかがでしょう。

//----------------------------------------------------//
//「検索での結果を範囲選択」にして実行
disabledraw;
while( 1 ) {
    searchdown2 "[0-9]+", regular;
    if( !result ) break;
    $s[#i] = gettext( seltopx, seltopy, selendx, selendy );
    moveto selendx, selendy;
    #i = #i + 1;
}
menuarray $s, #i;
endmacro;
//----------------------------------------------------//

     では, (^^)/~
                                        山紫水明

[ ]
RE:03508 searchdown でヒットした文字列No.03509
ENCODINGSHIFTJIS さん 02/12/07 13:55
 
クリップボード版ではこんな感じです

// 事前に Grep で対象行を収集しておくと、
// 複数ファイル処理が早くできる、
// ファイル名削除の処置が必要ですが

setclipboard "";
gofiletop;
while( 1 ) {
  searchdown "[0-9]+", regular;
  if( !result ) break;
  addclipboard gettext( seltopx, seltopy, selendx, selendy )+"\n";
  moveto selendx, selendy;
}
// あとでどこかにクリップボード吐き出し。
// 03484   239239    23u   39284    298492

[ ]
RE:03509 searchdown でヒットした文字列No.03510
ひろ さん 02/12/07 14:12
 
 今日は、ひろです。
>   searchdown "[0-9]+", regular;
>   if( !result ) break;
>   addclipboard gettext( seltopx, seltopy, selendx, selendy )+"\n";
 設定依存になので、最初に
//-------------------------------------------------------------------
#searchmode = searchmode;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
writeregnum "SelectFound",1;
envchanged;
closereg;
//-------------------------------------------------------------------
最後に
//-------------------------------------------------------------------
if( !#searchmode ){
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  writeregnum "SelectFound",#searchmode;
  envchanged;
  closereg;
}
//-------------------------------------------------------------------
としておけば確実

[ ]