【问题标题】:Create a comma separated list of quoted values创建一个逗号分隔的引用值列表
【发布时间】:2017-01-20 19:15:19
【问题描述】:

我需要在引号中创建一个国家名称列表,并在末尾添加一个逗号 - 除了最后一个国家/地区名称,如下所示: (我使用的是 ColdFusion 10)

  "Tuvalu",
  "Uganda",
  "Ukraine",
  "United Arab Emirates",
  "United Kingdom",
  "Uruguay"

  <cfquery name="query_names" datasource="MyDB">
   select short_desc
   from tbl_country
   where NVL(short_desc,' ') <> ' '
   order by short_desc
  </cfquery>
  <cfset TotalRec = "#query_names.Recordcount#">

  <cfloop query="query_names">
     <cfif query_names.Recordcount GT 271>
       <cfoutput>
         "#Trim(short_desc)#" & ","
       </cfoutput>
     <cfelse>
       <cfoutput>
         "#Trim(short_desc)#"
       </cfoutput>
     </cfif>
  </cfloop>

这个循环导致国家名称用引号括起来,但没有逗号。所以我的循环导致:

  "Tuvalu"
  "Uganda"
  "Ukraine"
  "United Arab Emirates"
  "United Kingdom"
  "Uruguay"

【问题讨论】:

    标签: coldfusion coldfusion-10


    【解决方案1】:

    如果您真的需要双引号,将带引号的值附加到数组并在最后将其转换为列表可能更简单。 ArrayToList 函数会自动为您处理逗号:

    <cfset names = []>
    <cfloop query="query_names">
        <cfset arrayAppend(names, '"'& short_desc & '"')>
    </cfloop>
    
    <cfoutput>#arrayToList(names)#</cfoutput>
    

    结果:

    "Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","Uruguay" 
    

    旁注,如果可以接受单引号,即',那就更简单了。跳过循环,直接使用QuotedValueList():

     <cfoutput>#quotedValueList(query_names.short_desc)#</cfoutput>
    

    结果:

    'Tuvalu','Uganda','Ukraine','United Arab Emirates','United Kingdom','Uruguay'
    

    【讨论】:

    • 不错!我更喜欢你的回答!
    • (编辑修复愚蠢的错别字)@CodyCaughlan - 谢谢 :) 如果 QuotedValueList 允许指定引用的类型,那就太好了,但是...... cest la vie。
    • c'est la Adob​​e :P
    • @Alex - 哈哈,我留着那个。
    • 感谢您的所有建议。效果最好的一个是使用数组。其他,尤其是像我的原始代码一样使用 cfloop,尤其是当我有大量记录时,工作速度较慢
    【解决方案2】:

    User1557856,你离得太近了。您的回答实际上很好,但有一点。如果你改正它,你会得到你想要的。

    你得到一个不带逗号的列表的原因是这样的:

    <cfif query_names.Recordcount GT 271>
    

    这个条件显然总是错误的。所以只运行代码的&lt;cfelse&gt;&lt;/cfif&gt; 部分。那是没有逗号的部分,因此是结果。

    如果你稍微修改你的代码,如下,你会得到想要的结果:

    <cfloop query="query_names">
         <cfif query_names.currentRow LT query_names.Recordcount>
           <cfoutput>
             "#Trim(short_desc)#",
           </cfoutput>
         <cfelse>
           <cfoutput>
             "#Trim(short_desc)#"
           </cfoutput>
         </cfif>
     </cfloop>
    

    【讨论】:

      【解决方案3】:

      我希望 listQualify() 以更简单的方式做同样的事情。不是吗???

      <cfset myQry = queryNew("country","varchar",[["Tuvalu"],["Uganda"],["Ukraine"],["United Arab Emirates"],["United Kingdom"],["Uruguay"]])>
      <cfdump var="#listQualify(valueList(myQry.country),'"')#" />
      

      如果我们需要单引号列表,我们也可以使用 quotedValueList() 作为 Leigh 提到的。

      【讨论】:

      • (在现已删除的答案的 cmets 中提到了这一点)。是的,我考虑过类似的方法,但决定反对它,因为当查询值包含逗号时,结果会全部倾斜。
      猜你喜欢
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      相关资源
      最近更新 更多