==================================================発行部数957======
     AutoCADカスタマイズ入門講座              No.22 1999/10/11
===================================================================
 AutoCADカスタマイズ入門講座のご購読ありがとうございます。
秋晴れで気持ちの良い日が続いています。皆さん連休はどの様に過ごされま
したか?。さて、今回は前回紹介できなかったsdialog1.lspプログラム内の
sum()関数とtanka()関数について説明します。sdialog1.lspについては
No.20/21をご覧ください。

--------------------------------------------------------------------
 1.sum()関数について
--------------------------------------------------------------------
 sum()関数を以下に示します。

(defun sum()
   (setq namae (get_tile "s_mei"))
   (setq ryou (get_tile "y_ryou"))
   (setq honsu (get_tile "h_su"))
   (set_tile "g_kei" (itoa (* (tanka namae ryou) (atoi honsu))))
)

ここで注意して頂きたい関数は、(get_tile)関数及び(set_tile)関数です。
それぞれの関数の書式は(get_tile "キー名")と(set_tile "キー名")です。
(get_tile)関数はタイルから値を取得します。これとは逆に、(set_tile)関
数はタイルに値を設定する事が出来ます。さて、キー名は覚えていらっしゃ
いますか?。そう、キー名はDCLファイル内に記述しましたね。DCLファイル
内で各タイルを識別するために付ける識別子です。では、もう一度sum()関
数を見てみましょう。

 まず、次の3つの式では指定してあるキー名を見れば分かるように、商品
名、容量、本数をダイアログボックスから取得し、各変数に代入しています
。

   (setq namae (get_tile "s_mei"))
   (setq ryou (get_tile "y_ryou"))
   (setq honsu (get_tile "h_su"))

ここで注意しなければならないのは、(get_tile)関数が返す値は文字列だと
いう事です(たとえ数字でも)。ですので、今回の様にダイアログボックスか
ら取得した値を用いて何らかの計算をしなければならない場合には、文字列
を整数または実数に変換する必要があります。また、逆に(set_tile)関数で
何らかの値をダイアログボックスに設定する場合、値が整数または実数の場
合には、それぞれの値を文字列に変換する必要があります。では次の式を見
てみましょう。ここで説明した事が、次の式で確認できます。

   (set_tile "g_kei" (itoa (* (tanka namae ryou) (atoi honsu))))

まず、既に求めてある商品名と容量から(tanka)関数を用いてその商品の単
価を求めています。この値と本数で合計金額を求めるわけですが、
変数honsuに設定されている値は文字列のため、(atoi)関数を用いて文字列
から整数に変換しています( (tanka)関数は整数を返すため、変換の必要は
ありません)。
合計金額を求めた後、合計金額を表示するテキストボックスに(set_tile)関
数を用いて合計金額を表示する訳ですが、今度は先ほど求めた合計金額
(整数)を(itoa)関数を用いて文字列に変換しています。
最後にもう一つ気を付ける事があります。(get_tile)を用いてリストボック
スまたはポップアップリストから、選択してある値を取得すると、選択され
た値ではなく、0から始まる整数が取得されます。つまり、選択されている
リストの番号が返されます。今回の例では、"コラ コーラ"を選択した時は
0、"ばっちゃん"を選択した時に1、"ポッカリスエット"を選択した時に2が
返されます。

--------------------------------------------------------------------
 2.tanka()関数について
--------------------------------------------------------------------
 次に(tanka)関数を示します。

(defun tanka(namae ryou)
   (setq tk 0)
   (if (= namae "0")
      (progn
          (if (= ryou "0") (setq tk 120))
          (if (= ryou "1") (setq tk 150))
      )
   )
   (if (= namae "1")
      (progn
          (if (= ryou "1") (setq tk 150))
          (if (= ryou "2") (setq tk 300))
      )
   )
   (if (= namae "2")
      (progn
          (if (= ryou "0") (setq tk 120))
          (if (= ryou "2") (setq tk 300))
      )
   )
   (setq tk tk)
)

 この関数の書式は、(tanka 商品名 本数)で入力した値に対応する商品の
単価を返します。また、対応した組み合わせが無い場合は0を返します。こ
の様な仕組みにするために、変数tkへ最初に0を代入しておきます。

--------------------------------------------------------------------
 3.まとめ
--------------------------------------------------------------------
 今回でやっとプログラムの説明が終わりました。次回はプログラムにエラーチェックなどを加えるつもりです。お楽しみに。

●バックナンバーは下記のURLで参照する事が出来ます。
http://www2u.biglobe.ne.jp/~Saturn5/alisp.htm
====================================================================
■登録/解除の方法
http://www2u.biglobe.ne.jp/~Saturn5/alisp.htm
「AutoCADカスタマイズ入門講座」は、上記URLよりいつでも
登録/解除可能です。
====================================================================
●広告の問い合わせ
広告のお問い合わせは以下のメールアドレスへお願いします。
wankichi@mba.nifty.ne.jp
====================================================================
■「AutoCADカスタマイズ入門講座」No.22
発行責任者 :わんきち(wankichi@mba.nifty.ne.jp)
発行システム:インターネットの本屋さん『まぐまぐ』
              http://www.mag2.com/
              マガジンID:0000011579
====================================================================
戻る