[ 新規に投稿する ]

selectcolumn文の使い方No.08788
いちもんじ さん 18/10/18 18:02 [ コメントを投稿する ]
  漠然とした質問で申し訳ありません。

selectcolumn文の使い方が今ひとつわかりません。

タブ区切りのファイルがあったとき、N番目のカラムをどうするのでしょうか?
 ・範囲を設定する?
 ・クリップボードにコピーする?
 ・文字変数に入れられる?

selectcolumn文を使ったマクロ(サンプル)があると良いのですが...
[ ]
RE:08788 selectcolumn文の使い方No.08789
秀丸担当 さん 18/10/19 09:13 [ コメントを投稿する ]
 
selectcolumnは、TSVモードまたはCSVモードになっていることが前提です。
タブ区切りのテキストで、[表示]→[タブストップ]→[TSVモード]になっているときの状態です。
または、[その他]→[ファイルタイプ別の設定]→[体裁]→[タブ]で「TSVモード」を選んだ状態でも同様です。

TSVモードになると、ウィンドウ上部のルーラーが「A   |B   |C   」という表示になりますが、ここをクリックすると縦方向にBOX選択できます。
これをマクロの文にしたのがselectcolumnです。
BOX選択なので、コピーするなり削除するなり、選択後の操作ができます。

例えば、マクロでTSVモードにして選択してコピーするには以下のような感じにします。

newfile;
config "xTabMode:0x0001"; //TSVモード
insert "A1\tB1\tC1\n";
insert "A2\tB2\tC2\n";
selectcolumn 1, 1; //B列を選択
copy2; //コピーとか


あと、[編集]→[変換]の機能は、BOX選択を複数選択扱いにして、変換モジュールが適用される機能が最近のバージョンにはあります。
これをマクロでもするには、事前にsetcompatiblemode 0x00100000;として、マクロ上での複数選択を有効にする必要があります。

setcompatiblemode 0x00100000;
tolower;
[ ]
RE:08789 selectcolumn文の使い方No.08790
いちもんじ さん 18/10/19 09:52 [ コメントを投稿する ]
  >
>selectcolumnは、TSVモードまたはCSVモードになっていることが前提です。

 頂いたサンプルを動かしてみました。
 おかげさまでイメージが掴めました。
 ご丁寧な解説をいただきありがとうございました。
[ ]
RE:08789 selectcolumn文の使い方No.08891
いちもんじ さん 19/01/25 12:11 [ コメントを投稿する ]
  >
>selectcolumnは、TSVモードまたはCSVモードになっていることが前提です。

 カーソルの位置が、何カラムにあるかを調べるコマンドや関数はありますか?
[ ]
RE:08891 selectcolumn文の使い方No.08892
秀丸担当 さん 19/01/25 14:43 [ コメントを投稿する ]
 
カーソル位置がCSV/TSVモードのどのカラムに位置するかを表す文は無いです。
あったらいいので、追加を検討したいと思います。
現状でする方法として、forwardtab文を使うとタブストップまたはCSV/TSVモードのカラムごとにカーソル移動できるので、それでなんとか調べることはできると思います。

例:

call Label_GetCsvTsvColumn;
#n=##return;
message str(#n);
endmacro;

Label_GetCsvTsvColumn:
  ##x=x;
  ##y=y;
  golinetop2;
  ##c=0;
  while(1){
    forwardtab;
    if(result==false) break;
    if(x>##x) break;
    ##c=##c+1;
  }
  moveto ##x,##y;
  return ##c;
[ ]
RE:08892 selectcolumn文の使い方No.08894
いちもんじ さん 19/01/28 09:40 [ コメントを投稿する ]
  >カーソル位置がCSV/TSVモードのどのカラムに位置するかを表す文は無いです。
>あったらいいので、追加を検討したいと思います。

 ご検討のほどよろしくお願いします。

 あと、selectcolumnで範囲指定で「行」も指定できるといいなぁと思います。Excelでいえば、row関数のような。
 n行目、m列目の値をコピーとか
 n行目、m列目からn+y行目、m+x列目までの範囲を矩形で指定できたりすると良いです。

 こちらもご検討いただければ幸いです。
[ ]
RE:08894 selectcolumn文の使い方No.08896
秀丸担当 さん 19/01/28 12:46 [ コメントを投稿する ]
 
V8.88β11で現在の位置を表すtabcolumnキーワードを追加してみています。
selectcolumnで行の範囲も指定できたらいいと思います。ご意見参考にさせていただきます。
現状でなんとかする方法として、部分編集中は、部分編集の対象となっている行だけになるので、これを使う方法があります。


setcompatiblemode 0x0f;

setcompatiblemode 0x0f;

//サンプルテキスト
newfile;
config "xTabMode:0x0101";//CSVモード
while(#i<20){
  insert "a,b,c,d,e,f,g\n";
  #i=#i+1;
}

//指定の範囲のコピー
#n1=10; #n2=15; //10行目〜15行目
#m1=1; #m2=3;  //0から数えて1列目〜3列目
movetolineno 1,#n1;
beginsel;
movetolineno 1,#n2+1;
endsel;
rangeeditin;
selectcolumn #m1,#m2;
message "コピーします";
copy;
rangeeditout;
[ ]
RE:08896 selectcolumn文の使い方No.08897
いちもんじ さん 19/01/28 14:31 [ コメントを投稿する ]
  >V8.88β11で現在の位置を表すtabcolumnキーワードを追加してみています。
>selectcolumnで行の範囲も指定できたらいいと思います。ご意見参考にさせていただきます。

 ご対応いただけそうで、次版の公開が楽しみです。
 よろしくお願いします。
[ ]
RE:08897 selectcolumn文の使い方No.08900
いちもんじ さん 19/01/29 18:37 [ コメントを投稿する ]
  >>V8.88β11で現在の位置を表すtabcolumnキーワードを追加してみています。

使えています。
強調表示するようにしてもらえたら...と思います。

p.s.
 このフォーラムでコメントを選択したら、画面下に表示されるとありますが、IEでは表示されますが、Google ChromeではNGのようです。
[ ]

[ 新規に投稿する ]