теги ColdFusion в & функция не в полной мере иметь дело с несколькими символами разделителями очень хорошо. ArrayToList()
поддерживает несколько разделителей, но большинство других функций, связанных с списком, не работают.
Если ваши данные никогда не содержат ~
или ^
, я бы воспользовался этим и заменил ограничители длиной 2 длины односторонними делителями.
(Edit: Как отмечает Leigh в комментариях, ReReplace
, или ReplaceList()
не требуется в этом случае, поскольку CF игнорирует пустые элементы по умолчанию). Он не изменит вывод, чтобы удалить его, но в этом и смысл, что он тоже ничего не делает. Отмечено, чтобы уточнить суть вопроса.)
<cfset dList = "R0006^^1.00000000~~R0042^^1.00000000~~R0049^^1.00000000~~R0072^^1.00000000~~R0088^^3.00000000~~R0092^^1.00000000~~R0106^^1.00000000" />
<!---cfset dList = ReReplace(dList,"(~|\^)\1","\1","ALL")--->
<cfset dArray = ListToArray(dList,"~",false) />
<cfloop array="#dArray#" index="a1">
<cfquery...>
insert into mytable(lname,lvalue)
values(<cfqueryparam value="#listfirst(a1,"^")#">,<cfqueryparam value="#listlast(a1,"^^")#">)
</cfquery>
</cfloop>
Приятная часть об этом заключается в том, что она имеет неплохую обратную совместимость.
Однако это предполагает, что каждый элемент в списке с разделителями имеет два подпозиции. Если это не так и есть только полевая метка, вы можете это сделать.
<cfset dList = "R0006^^1.00000000~~R0042^^1.00000000~~R0049^^1.00000000~~R0072^^1.00000000~~R0088^^3.00000000~~R0092^^1.00000000~~R0106^^1.00000000" />
<!---cfset dList = ReReplace(dList,"(~|\^)\1","\1","ALL")--->
<cfset dArray = ListToArray(dList,"~",false) />
<cfloop array="#dArray#" index="a1">
<cfquery...>
insert into mytable(lname,lvalue)
values(<cfqueryparam value="#listfirst(a1,"^")#">,<cfqueryparam value="#(listlen(a1,"^") gt 1 ? listlast(a1,"^") : "")#">)
</cfquery>
</cfloop>
Наконец, как Дэвид Фабер указывает в комментариях, вы можете использовать ReplaceList(dlist, "~~,^^", "~,^")
вместо ReReplace(dList,"(~|\^){2}","\1","ALL")
, который позволит достичь той же цели, но имеет дополнительное преимущество, заключающееся легче читать для людей, которые не могут быть комфортно с регулярными Выражения.
Как насчет 'ListToArray (myVar," ~~ ")'? –
Вы также можете использовать cfloop с разделителем, чтобы перебрать ваш список. –