マクロヘルプに提案:Perl流の文字列手法No.08508
でるもんたいいじま さん 17/05/19 17:10
 
でるもんた・いいじまです。

ここ1年間で2件ほど、Perl風に変数名をそのままダブルクォートの中に
入れてハマっている方からの質問がありました。

具体的には、下記の2つの投稿から始まるスレッドです。

  Subject: hidesoft.4:08103| RE 08102 追加質問
  Date: Mon, 18 Apr 2016 19:55:03 +0900

  Subject: hidesoft.2:35771| 文字列型の変数について
  Date: Fri, 05 May 2017 17:02:11 +0900

そこで提案なのですが、マクロヘルプの「文字列」のページ
(040_Statement_String.html)に、Perl流の方法は使えませんという
注記を書いてみてはいかがでしょうか。

具体的には、たとえば次のようになるかと思います。
────────── ここから ──────────
文字列を連結する際に、Perlなどで使われている、ダブルクォーテーションの
中に変数名を書き込む方法は使えません。また、数値型の変数の値を文字列に
結合する際には、str関数などで文字列型に変換してから結合する必要があります。

<pre>
$company="有限会社サイトー企画";
#zip=9160047;
$pref="福井県";
$city="鯖江市";

// このように書いても、期待通りのメッセージは表示されません。
message "$companyの郵便番号〒#zipは、$pref$cityの番号です。";

// 次の2行のコメントアウトを解除すると、マクロ実行時にエラーになります。
// message $company + "の郵便番号〒" + #zip +"は、" +
// $pref +$city + "の番号です。";

// 正しくは、次のようにします。
message $company + "の郵便番号〒" + rightstr("000000"+str(#zip),7) +
"は、" + $pref + $city + "の番号です。";

//V8.56以降では、sprintf関数を使って次のように簡潔に書くことができます。
message sprintf("%sの郵便番号〒%07uは、%s%sの番号です。",
$company, #zip, $pref, $city);
</pre>

上の例のように、 ダブルクォーテーションの中に変数名を直接書いても
その変数の内容には置き換わらないので、逆にいえば、ダブルクォーテーション
の中に $ や # といった文字そのものを書き込む場合には、わざわざ \$、\#
と書く必要はありません(そう書くと、デフォルトの設定では警告が出ます)。

<pre>
#price=12300;
#rate_USDJPY=107;

// この記述で正常に動作します。
message "定価は$" + str(#price) +
"(約" + str(#price*#rate_USDJPY) + "円)です。";

// ここでは \$ と書いています。コメントアウトを解除すると、
// V8.??以降ではデフォルトで警告が出ます。
// message "定価は\$" + str(#price) +
// "(約" + str(#price*#rate_USDJPY) + "円)です。";
</pre>

参考:
 <a href="070_Function_str.html">str</a>
 <a href="070_Function_rightstr.html">rightstr</a>
 <a href="070_Function_sprintf.html">sprintf</a>
<br /><a href="???:080_MACRO_YEN_NOMEAN.html"
>文字列中の\についての警告 (秀丸本体のヘルプ)</a></li>
</ul>
────────── ここまで ──────────

このへんのことは、20世紀からプログラミングを続けている人には
ごく当たり前のことなのですが、今やすでに、21世紀生まれの人が
高校の必修科目としてプログラミングを学ぶ時代です。このへんは
少し丁寧に書いてあげたほうがいいかなと思います。

細部については担当さんに一任します。よろしくご検討ください。

[ ]
RE:08508 マクロヘルプに提案:Perl流の文No.08509
秀丸担当 さん 17/05/19 17:20
 

ご提案ありがとうございます。
そういう説明書きがあってもいいと思います。
参考にさせていただいて、何らかの注意書きを追記したいと思います。

[ ]
RE:08509 マクロヘルプに提案:Perl流の文No.08510
でるもんたいいじま さん 17/05/19 23:32
 
でるもんた・いいじまです。

> ご提案ありがとうございます。
> そういう説明書きがあってもいいと思います。
> 参考にさせていただいて、何らかの注意書きを追記したいと思います。

ありがとうございます。
よろしくご検討のほどお願いいたします。

[ ]