|
でるもんた・いいじまです。
ここ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世紀生まれの人が
高校の必修科目としてプログラミングを学ぶ時代です。このへんは
少し丁寧に書いてあげたほうがいいかなと思います。
細部については担当さんに一任します。よろしくご検討ください。
|
|