2017-01-20 13 views
1

Мне нужно создать список названий стран в кавычки и запятые в конце - за исключением последнего названия страны, как это: (я использую 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" 

ответ

6

Если вам действительно нужны двойные кавычки, это, вероятно, проще добавить процитированные значения массива и преобразовать его в список в конце. 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' 
+0

Ницца! Мне нравится ваш ответ лучше! –

+0

(Edit fix глупые опечатки) @CodyCaughlan - Спасибо :) Было бы замечательно, если бы QuotedValueList разрешал указывать тип цитаты, но ... cest la vie. – Leigh

+1

c'est la Adobe: P – Alex

1

User1557856, вы были так близки. Ваш ответ на самом деле хорош, но для одной точки. Если вы исправите это, вы получите то, что хотите.

Причина, почему вы получили список без запятых это:

<cfif query_names.Recordcount GT 271> 

Это условие всегда ложно, по-видимому. Таким образом, выполняется только часть кода <cfelse></cfif>. Это часть без запятых, следовательно, результат.

Если вы измените код немного, так, вы получите желаемый результат:

<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> 
+0

Хороший улов на жестком закодированном количестве записей. –

0

Я надеюсь listQualify() делает то же самое в довольно простой способ. не так ли ???

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

Также мы можем использовать quotedValueList() в Leigh упоминалось, если нужно единый цитируемый список.

+0

(Упомянуто это в комментариях теперь удаленного ответа). Да, я думал о подобном подходе, но решил против него, потому что результаты все искажаются, когда значения запроса содержат запятые. – Leigh

 Смежные вопросы

  • Нет связанных вопросов^_^