Какой самый прямой способ воспроизвести этот printf-подобный формат с ColdFusion? - PullRequest
3 голосов
/ 25 февраля 2011

Меня бросили в ColdFusion за очень простое задание. Приложение имеет некоторую логику для отображения «кодов помощи» (давайте не будем вдаваться в то, что представляет собой код справки), однако логика глючит и требует исправления. Учитывая двухбуквенный код, 1-4-значный номер и еще один 1-2-значный номер, мне нужно будет отобразить их так: printf вызов будет:

printf("%s%04d%02d", letterCode, bigNumber, smallNumber);

Если вы не знакомы с функцией printf, она принимает строку формата (первый параметр) и записывает в нее другие переменные в соответствии с заданным форматом. %s означает «написать строку», а %d означает «написать число»; %0zd означает "написать число и дополнить его нулями, чтобы его длина была не менее z символов (поэтому %04d означает" написать число и дополнить его нулями, чтобы его длина составляла не менее 4 цифр).

Вот несколько примеров с %s%04d%02d:

"AD", 45, 12:  AD004512
"GI", 5121, 1: GI512101
"FO", 1, 0:    FO000100

Однако я впервые использую ColdFusion, и я не смог найти ничего подобного printf или sprintf для форматирования строк.

Другой парень, который здесь больше не работает, прибегнул к (неработающему) циклу, и я подумал, что было бы лучше использовать библиотечный код вместо фактического исправления цикла, так как в любом случае мне может понадобиться опять похожие вещи.

Ответы [ 4 ]

8 голосов
/ 25 февраля 2011
<cfset bigNumberPadded = NumberFormat(bigNumber,"0000")>
<cfset smallNumberPadded = NumberFormat(smallNumber,"00")>
<cfoutput>#letterCode##bigNumberPadded##smallNumberPadded#<cfoutput>

Или альтернативно ... как предложено bpanulla и исправлено Ли

<cfset args = ["AD", javacast("int", 45), javacast("int", 12)]>
<cfset output= createObject("java","java.lang.String").format("%s%04d%02d", args) >
4 голосов
/ 25 февраля 2011

Вы можете использовать NumberFormat для дополнения числа начальными нулями в CF.

<cfoutput>#letterCode##NumberFormat(bigNumber, '0000')##NumberFormat(smallNumber, '00')#</cfoutput>
1 голос
/ 25 февраля 2011

Существует множество способов сделать это на уровне Java, лежащем в основе ColdFusion. Вот один ресурс Java:

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html

Создайте экземпляры нужных вам классов Java с помощью CFOBJECT или CreateObject.

0 голосов
/ 25 февраля 2011

Я предполагаю, что вы отображаете их на веб-странице? Если это так, я бы использовал оператор switch / case. Поскольку вы сказали «дали двухбуквенный код ...», переключатель / кейс будет работать хорошо. Например:

<cfswitch expression="#twoLetterCode#">
    <cfcase value="aa12348">%s%04d%02d</cfcase>
    <cfcase value="bb23456">%s%05f%01e</cfcase>
    <cfcase value="cc97641">%s%08g%10j</cfcase>
    <cfdefaultcase>%s%04d%02d</cfdefaultcase>
</cfswitch>

Или вместо этого вы можете использовать if / else. Но главное (чтобы ответить на ваш вопрос) заключается в том, что в ColdFusion вы просто печатаете отображаемые символы (будь то коды помощи, или текст, или что-то еще). Вам не нужно использовать специальную функцию для отображения текста на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...