[ 新規に投稿する ]

改行などエスケープ文字の指摘No.08514
KAZYA71 さん 17/06/05 12:58 [ コメントを投稿する ]
  既存のマクロマクロ実行時にエラー表示されるようになりました。
Ver.8.64 では問題なく実行されます。(秀丸はいずれも 32bit 用です。)
Ver.8.69 と Ver.8.71 でエラー表示されます。
エラー表示されても中断せず進めば問題なく完遂します。

// -A- //
// Ver.8.69 〜 Ver.8.71 エラー表示されるが"いいえ(N)"で進むと正しい //
// 既存のマクロでの記述方法 //

question "
改行コードのテストです。 \n
丸括弧のテストです。 \ \(\ 〜\ \)\ \n
カギ括弧のテストです。 \ \ [\ 〜\ \] \n
";
  if (result == no) endmacro;
  else goto END;

END:
endmacro;

// -B- //
// Ver.8.69 〜 Ver.8.71 エラー表示されるが"いいえ(N)"で進むと改行部は正しい //

question "
改行コードのテストです。 \n
丸括弧のテストです。 \\ \\(\\ 〜\\ \\)\\ \n
カギ括弧のテストです。 \\ \\ [\\ 〜\\ \\] \n
";
  if (result == no) endmacro;
  else goto END;

END:
endmacro;

// -C- //
// Ver.8.69 〜 Ver.8.71 エラー表示されるが"いいえ(N)"で進むと括弧部は正しい //

question "
改行コードのテストです。 \\n
丸括弧のテストです。 \ \(\ 〜\ \)\ \\n
カギ括弧のテストです。 \ \ [\ 〜\ \] \\n
";
  if (result == no) endmacro;
  else goto END;

END:
endmacro;

// -D- //
// Ver.8.69 〜 Ver.8.71 エラー表示されないが正しくない //

question "
改行コードのテストです。 \\n
丸括弧のテストです。 \\ \\(\\ 〜\\ \\)\\ \\n
カギ括弧のテストです。 \\ \\ [\\ 〜\\ \\] \\n
";
  if (result == no) endmacro;
  else goto END;

END:
endmacro;

----------------------------------------------------------------------------
[マクロファイル名].mac([論理行番号]): 文字列中の「\」は「\\」と書く必要があります。
(ヘルプ参照)

該当の文字: \

マクロの実行を中断しますか?
----------------------------------------------------------------------------

-A- の書き方で今まで問題ありませんでしたがエラー表示されるようになりました。
-D- の書き方にするとでエラー表示されませんが、不正な(意図通りではない意味)表示になります。

Ver.8.64 から Ver.8.69 で変更されたのだと思いますが、私の書き方が間違っているのか、確認内容(指摘内容)が間違っているのか、いまいち分かりません。
「マクロの実行を中断しますか?」で「いいえ(N)」を選択すれば続行するため大きな問題ではないのですが、なんかスッキリしないため真偽を知りたいと思い投稿しました。
[ ]
RE:08514 改行などエスケープ文字の指摘No.08515
秀丸担当 さん 17/06/05 14:23 [ コメントを投稿する ]
 
このエラーメッセージは、文法的に適切ではないと思わしき書き方がある場合に
V8.66から出すようになりました。

とりあえずエラーメッセージを出さずに従来通りにするには、[その他]→[動作
環境]→[トラブル対策]→[その他のトラブル対策]にある、「マクロで問題のあ
る文法の警告を出さない」をONにすることで、従来通り動作させることができま
す。

意味は、エラーメッセージでヘルプボタンを押した内容にもありますが、「\」
が意味のない使われ方になっているということになります。

例では、「\」が「\n」改行のときだけに必要で、それ以外の文字には必要ない
です。
マクロは以下のようにするといいと思います。

question "
改行コードのテストです。 \n
丸括弧のテストです。  ( 〜 ) \n
カギ括弧のテストです。   [ 〜 ] \n
";
  if (result == no) endmacro;
  else goto END;

END:
endmacro;
[ ]
RE:08515 改行などエスケープ文字の指摘No.08516
でるもんたいいじま さん 17/06/05 15:13 [ コメントを投稿する ]
  こんにちは。秀丸ユーザの「でるもんた・いいじま」です。

> 意味は、エラーメッセージでヘルプボタンを押した内容にもありますが、
> 「\」が意味のない使われ方になっているということになります。

> 例では、「\」が「\n」改行のときだけに必要で、それ以外の文字には必要ない
> です。
> マクロは以下のようにするといいと思います。

> question "
> 改行コードのテストです。 \n
> 丸括弧のテストです。  ( 〜 ) \n
> カギ括弧のテストです。   [ 〜 ] \n
> ";

補足します。
マクロで正規表現を使うときには「\」がない、1つある、2つ以上ある、で
意味が違ってくることがありますので、注意してください。

searchdown "n", regular; // 半角小文字の「n」にヒットします。
searchdown "\n", regular; // 改行にヒットします。
searchdown "\\n", regular; // これも改行にヒットします。

searchdown "[0-9]", regular; // 半角数字にヒットします。
searchdown "\[0-9\]", regular; // 警告が出たあと、半角数字にヒットします。
searchdown "\\[0-9\\]", regular; // [0-9] という5文字の並びにヒットします。
searchdown "\\[0-9\]", regular; // これはエラーになります。

searchdown "\\\\[0-9]+(,[0-9]{3})*"; // 「\1,234,567,890」とかにヒットします。
[ ]
RE:08516 改行などエスケープ文字の指摘No.08517
KAZYA71 さん 17/06/05 16:34 [ コメントを投稿する ]
  ありがとうございました。
今まで正しくない記述で使っていたのに問題ないと思い込んでいました。
記述を修正して使いたいと思います。
[ ]

[ 新規に投稿する ]