ColdFusion循环中向数组元素追加错误信息失败,求修正方案
问题:向数组对应元素追加错误信息失败,错误信息被添加为新元素
尝试向数组对应元素追加错误信息时遇到问题,现有代码如下:
<cfset NL = CreateObject("java", "java.lang.System").getProperty("line.separator")> <cfset MyList= listToArray(UpldRslt,NL,false,true)> <cfloop from="2" to="#ArrayLen(MyList)#" index="i"> <cftry> <cfoutput> <cfset FinalList = reMatch('(?:"(?:[^"]|"")*"|[^,]*)', MyList[i])> <cfset ResidentialIndicatorOverrideID = replace(FinalList[1], """", "", "ALL") > <cfset Address = replace(FinalList[2], """", "", "ALL") > <cfset City = replace(FinalList[3], """", "", "ALL") > <cfset State = replace(FinalList[4], """", "", "ALL") > <cfset Zipcode = replace(FinalList[5], """", "", "ALL") > <cfif IsNumeric(Zip) eq "NO"> <cfset ErrorNote = "Please enter the numeric value for ZIP" > <cfset ErrorOccured= 1> </cfif> <cfif ErrorOccured eq 1> <cfset ArrayAppend(Mylist[i],"#ErrorNote#","true")> </cfif> </cfloop>
使用<cfset ArrayAppend(Mylist,"#ErrorNote#","true")>时,错误信息被追加为数组新元素,实际输出:
test,2,3,4,5 6,2,3,7,8 Please enter the numeric value for ZIP
期望将错误信息追加到对应数组元素的末尾,目标输出:
test,2,3,4,5,Please enter the numeric value for ZIP 6,2,3,7,8
解决方案
错误原因
ArrayAppend()的作用是向整个数组添加新元素,而非修改数组中某个已存在的字符串元素。要实现将错误信息追加到对应元素末尾,直接对数组的第i个元素进行字符串拼接即可。
另外代码中还有两个潜在问题:
- 变量名不统一:判断时使用
Zip,但定义的变量是Zipcode,会导致判断逻辑失效 ErrorOccured未初始化:循环中如果上一次触发了错误,下一次循环不会重置状态,可能导致错误追加到无关元素
修正后的代码
<cfset NL = CreateObject("java", "java.lang.System").getProperty("line.separator")> <cfset MyList= listToArray(UpldRslt,NL,false,true)> <cfloop from="2" to="#ArrayLen(MyList)#" index="i"> <!--- 每次循环重置错误状态 ---> <cfset ErrorOccured = 0> <cfset ErrorNote = ""> <cftry> <cfset FinalList = reMatch('(?:"(?:[^"]|"")*"|[^,]*)', MyList[i])> <cfset ResidentialIndicatorOverrideID = replace(FinalList[1], """", "", "ALL") > <cfset Address = replace(FinalList[2], """", "", "ALL") > <cfset City = replace(FinalList[3], """", "", "ALL") > <cfset State = replace(FinalList[4], """", "", "ALL") > <cfset Zipcode = replace(FinalList[5], """", "", "ALL") > <!--- 修正变量名:Zip → Zipcode ---> <cfif NOT IsNumeric(Zipcode)> <cfset ErrorNote = "Please enter the numeric value for ZIP" > <cfset ErrorOccured= 1> </cfif> <cfif ErrorOccured eq 1> <!--- 直接拼接字符串到数组元素末尾 ---> <cfset MyList[i] = MyList[i] & ",#ErrorNote#"> </cfif> <cfcatch> <!--- 可选:处理异常,避免循环中断 ---> <cfset ErrorNote = "Unexpected error processing line #i#"> <cfset MyList[i] = MyList[i] & ",#ErrorNote#"> </cfcatch> </cftry> </cfloop>
关键修改点
- 每次循环开始时重置
ErrorOccured和ErrorNote,避免状态残留 - 将
IsNumeric(Zip)修正为IsNumeric(Zipcode),匹配定义的变量名 - 替换
ArrayAppend(Mylist[i], ...)为MyList[i] = MyList[i] & ",#ErrorNote#",直接修改数组中的字符串元素,实现追加效果
内容的提问来源于stack exchange,提问作者sangeeta bhat
相关产品推荐
相关产品推荐

