TSV/CSVモードでのマクロNo.37454
さん 19/08/01 09:30
 
 お世話になります。

 TSV/CSVモード時に利用するマクロを制作しようとしているのですが、下記の2点に
ついて教えていただけないでしょうか。

 1.現在のモードがTSV/CSVモードになっているかを取得する方法はありますか?
 2.現在のカラムの内容を取得する方法はありますか?
 現状では、下記のように取得していますが、もっと簡単な方法があれば、教えてい
ただけると幸いです。

 (1)「backtab」する。
 (2)「forwardtab」して、「#start=x」で先頭の位置を保存。
 (3)「forwardtab」して、「#end=x」で末尾の位置を保存。
 (4)「$str = gettext(#start, y, #end - 1, y, 1);」で現在カラムの内容を取得。

 以上、よろしくお願いいたします。

[ ]
RE:37454 TSV/CSVモードでのマクロNo.37455
秀丸担当 さん 19/08/01 10:08
 

TSVモードかCSVモードかを判断するには、以下のようにしてできます。

if( (getconfig( "TabMode" ) & 0x0f0f) == 0x0101 ) {
  message "CSVモードです";
} else if( (getconfig( "TabMode" ) & 0x0f0f) == 0x0001 ) {
  message "TSVモードです";
}

セルの内容の取得等は、V8.88以降では、selectcolumnを使って、セル単位の矩形の
範囲を選択することができます。
tabcolumnキーワードでは、現在のカーソルを含む位置を取得できます。
組み合わせて、以下のようにすると、現在のカーソル位置を含むセル1つを選択でき
ます。

selectcolumn tabcolumn, tabcolumn, lineno, lineno;

[ ]
RE:37455 TSV/CSVモードでのマクロNo.37456
さん 19/08/01 11:07
 
 お世話になります。。

 アドバイスありがとうございます。
 やりたいことが大体できました。

 ところで、1つ確認なのですが、一番末尾のカラムにいる状態で、「forwardtab」
を実行しても、resultはfalseにならないのですが、これはこういう仕様でしょうか。
 例えば、下記のようなCSVの表があるとします。

abc,def
ghi,jkl

 この表で、1行目の「def」に移動した状態で、マクロで「forwardtab」を実行する
と、resultはtrueになってしまうようです。
 ちなみに、改行文字にカーソルを合わせていると、「forwardtab」の結果はfalse
になるようです。
 個人的には、末尾のカラムにいる状態でもfalseになってほしいんですが。

 以上、よろしくお願いいたします。

[ ]
RE:37456 TSV/CSVモードでのマクロNo.37457
秀丸担当 さん 19/08/01 12:09
 

forwardtabは、末尾のカラム内にカーソルがあっても、行末に移動するので、行末に
移動した場合はresultはtrueになってしまいます。これはそういう仕様ということに
なります。
tabcolumnキーワードが変化したかどうかで、次のカラムに移動したかどうかを知る
ことができます。

[ ]
RE:37457 TSV/CSVモードでのマクロNo.37458
さん 19/08/01 16:21
 
 お世話になります。。

 なるほど、やはりそうなんですね。
 とりあえず、アドバイスいただいた方法でうまくいきました。
 ありがとうございました。

 以上、今後ともよろしくお願いいたします。

[ ]