我有一个列表,想要拆分并插入到表中。该列表包含成对的名称和值:
R0006^^1.00000000~~R0042^^1.00000000~~R0049^^1.00000000~~R0072^^1.00000000~~R0088^^3.00000000~~R0092^^1.00000000~~R0106^^1.00000000
我要遍历此列表,然后将名称和值插入数据库表中,因为我正努力使用不同的定界符及其关联的值。
非常感谢JC
ColdFusion的标记和功能不能很好地处理多字符定界符。ArrayToList()
支持多个定界符,但大多数其他大多数与列表相关的功能均不支持。
如果您的数据从不包含~
或^
本身,我将利用该优势并将2长度定界符替换为1长度限定符。
(编辑:正如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>
最后,正如David Faber在评论中指出的那样,您可以使用ReplaceList(dlist, "~~,^^", "~,^")
代替ReReplace(dList,"(~|\^){2}","\1","ALL")
它来达到相同的目标,但是具有额外的好处,即对于可能对正则表达式不满意的人更易于阅读。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句