←前へ 次へ→
機能別Ｑ＆Ａ 質問番号順Ｑ＆Ａ 目次

# [HMM0082A]

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

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

  方法は複数あります。

  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関数では正常に内容を(簡単には)取得できません。

←前へ 次へ→
機能別Ｑ＆Ａ 質問番号順Ｑ＆Ａ 目次