user3733648
user3733648

Reputation: 1333

using multiple characters as delimiters in Coldfusion list

I am trying to use multiple characters as the delimeter in ColdFusion list like ,( comma and blank) but it ignores the blank.

I then tried to use:

<cfset title = listappend( title, a[ idx ].title, "#Chr(44)##Chr(32)#" ) /> 

But it also ignores the blank and without blanks the list items to diffucult to read.

Any ideas?

Upvotes: 2

Views: 919

Answers (3)

Dan Bracuk
Dan Bracuk

Reputation: 20804

Use a two step process. Step 1 - create your comma delimited list. Step 2

yourList = replace(yourList, ",", ", ", "all");

Upvotes: 1

Adam Cameron
Adam Cameron

Reputation: 29870

I think there's a fundamental flaw in your approach here. The list delimiter is part of the structure of the data, whereas you are also trying to use it for "decoration" when you come to output the data from the list. Whilst often conveniently this'll work, it's kinda conflating two ideas.

What you should do is eschew the use of lists as a data structure completely, as they're a bit crap. Use an array for storing the data, and then deal with rendering it as a separate issue: write a render function which puts whatever separator you want in your display between each element.

function displayArrayAsList(array, separator){
    var list = "";
    for (var element in array){
        list &= (len(list) ? separator : "");
        list &= element;
    }
    return list;
}
writeOutput(displayAsList(["tahi", "rua", "toru", "wha"], ", "));

tahi, rua, toru, wha

Upvotes: 1

John Whish
John Whish

Reputation: 3036

With ListAppend you can only use one delimiter. As the docs say for the delimiters parameter:

If this parameter contains more than one character, ColdFusion uses only the first character.

I'm not sure what a[ idx ].title contains or exactly what the expected result is (would be better if you gave a complete example), but I think something like this will do what you want or at least get you started:

<cfscript>
a = [
    {"title"="One"},
    {"title"="Two"},
    {"title"="Three"}
];
result = "";

for (el in a) {
    result &= el.title & ", ";
}

writeDump(result);
</cfscript>

Upvotes: 1

Related Questions