none
クラッシックASPで項目名を変数にしたい RRS feed

  • 質問

  • IIS7.0 クラッシックASPのコーディングで教えてください。
    コンスタント値として 項目名の最終一文字が連番になった定数が定義してあり、
    プログラム内で、前処理から受け取った値が最終一文字に該当する値を
    応答する、単純な処理なのですが、

    '前処理で与えられる引数: uketori_no 
    ----------------------------------

    '最終一文字が連番になった定数定義(仮に1から9としておきます)
    Const con_1 = "red"
    Const con_2 = "blue"
    Const con_3 = "green"
      :
      :
    Const con_9 = "green"
    '応答処理--------------------
    Select Case uketori_no
     Case 1
    resvalue = con_1
     Case 2
    resvalue = con_2
     Case 3
    resvalue = con_3
      :
      :
     Case 9
    resvalue = con_9
    End Select
    response.write resvalue

    とすれば、処理はできるにはできるのですが、
    冗長なコーディングとなり、改造時にも冗長となるため項目名を変数化して値を取得できないかと思っています。

    '応答処理--------------------
    resvalue = "con_"&uketori_no
    response.write resvalue
    ----------------------------------
    とすると受け取りたい項目名までは生成はできるのですが、
    項目名で定義されている定数値ではなく、項目名を値として
    の応答しかできません。

    受け取りたいコンスタント定義名を生成して、
    生成した項目の値を使用する方法はないでしょうか?

    宜しくお願いします



    2016年4月27日 7:01

回答

  • こんな感じですかね?

    <%
    Const con_1 = "red" 
    Const con_2 = "blue" 
    Const con_3 = "green" 
    
    uketori_no = 2
    
    Execute("resvalue = con_" & uketori_no)
    
    Response.Write (resvalue )
    %>


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年4月27日 7:59
  • こんにちは。

    Dictionaryを使う方法もあると思います。

    <% 
    Set dic = Server.CreateObject("Scripting.Dictionary")
    dic.Item("con_1") = "red"
    dic.Item("con_2") = "blue"
    dic.Item("con_3") = "green"
    
    uketori_no = 2
    resvalue = dic.Item("con_" & uketori_no)
    
    Response.Write (resvalue )
    
    %>



    きよくらならみ

    2016年4月27日 8:51

すべての返信

  • こんな感じですかね?

    <%
    Const con_1 = "red" 
    Const con_2 = "blue" 
    Const con_3 = "green" 
    
    uketori_no = 2
    
    Execute("resvalue = con_" & uketori_no)
    
    Response.Write (resvalue )
    %>


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年4月27日 7:59
  • こんにちは。

    Dictionaryを使う方法もあると思います。

    <% 
    Set dic = Server.CreateObject("Scripting.Dictionary")
    dic.Item("con_1") = "red"
    dic.Item("con_2") = "blue"
    dic.Item("con_3") = "green"
    
    uketori_no = 2
    resvalue = dic.Item("con_" & uketori_no)
    
    Response.Write (resvalue )
    
    %>



    きよくらならみ

    2016年4月27日 8:51
  • ありがとうございます。うまくできました。
    Execute命令を勉強してみます。
    2016年4月27日 11:28
  • ありがとうございます。

    コンスタント定義でなくて、配列にいれて、配列の呼び出しキーとして、受け取りたい項目名を使用するということですね。なるほどです。

    勉強になりました。

    2016年4月27日 11:31