last updated:2023/12/27

←前へ 次へ→
機能別Q&A 質問番号順Q&A


[HMM0082A]

●カーソルのある行の内容を文字列型変数に取り込む方法

Q.
カーソルのある行の内容を、文字列型変数に取り込む方法はありませんか?

A.

方法は複数あります。

  1. 行選択を行い、選択範囲を取り込む

    selectline;
    $line = gettext(seltopx, seltopy, selendx, selendy);
    message $line;
  2. gettext2関数と、キーワードを組み合わせて取り込む

    $line = gettext2(0,lineno,linelen2, lineno);
    message $line;
  3. getlinetext関数を使う

    $line = getlinetext(0);
    message $line;
[解説]
マクロ (1) は、行選択を行い選択範囲の文字列を取り込んでいます。
  • 行選択の副作用でカーソルがマクロ実行前後で、違う位置に移動してしまう場合あり
  • 行末に改行コードがある場合は取り込む
マクロ (2) は キーワードを使用し、範囲選択なしで取り込んでいます。

行の先頭は、"0"と決まっているので直接記述し、行の長さは linelen2 キーワード、行数は lineno キーワード を使い範囲を求め取得しています。

  • マクロ実行前後でカーソルは移動しない
  • 行末に改行コードがあっても取り込まない
マクロ (3) は Ver.9.19 で追加された関数を使用しています。

getlinetext の引数には 本来は lineno キーワードの値を使用しますが、0 を指定するとカーソル行が対象になります。

  • マクロ実行前後でカーソルは移動しない
  • 行末に改行コードがある場合は取り込む

マクロ (1) で取り込まれる改行コードに関しては、「第III部〜秀丸マクロのいろはにほへと 秀丸マクロで文字列を編集する」の「gettext文,gettext2文 の補足」を参照。

マクロ (3) で取り込まれる改行コードに関しては、現状で制御する手段は提供されていないので、自前でなんとかする必要があります。

[補足]
マクロ (2) は、gettext関数でも問題ないように見えますが、折り返しやタブコードがあると gettext関数では正常に内容を(簡単には)取得できません。

←前へ 次へ→
機能別Q&A 質問番号順Q&A