以下代码正确创建代码,但仅在以下
中发布<cfset str = "Previoushistory-Diagnosis= 085.2 : Cutaneous leshmaniasis, Asian desert**Controlled-Diagnosis= 085.2 : Asian desert cutaneous leishmaniasis**Controlled-Diagnosis= 153.2 : Cancer of colon, descending colon**Active-Diagnosis= 209.15 : MAL CARCINOID DESC COLON**151.9 : Stomach cancer= UNCONTROLLED">
<cfset string1 = ''>
<cfset generateLst = ''>
<cfset generateLst = ''>
<cfset generateTextlst = ''>
<cfset generateStr = ''>
<cfloop list="#str#" index="elem" delimiters="**">
<cfset string1 = listAppend(string1, elem,'~')>
<cfset delimis = ":">
<cfloop list="#string1#" index="k" delimiters="~">
<cfset getString = GetToken(k,1,'#delimis#')>
<cfset generateStr = ListRemoveDuplicates(ListAppend(generateStr,getString))>
<cfset getID = GetToken(k,2,'#delimis#')>
<cfset generateLst = ListRemoveDuplicates(ListAppend(generateLst,getID))>
<cfset getText = GetToken(k,3,'#delimis#')>
<cfset generateTextlst = ListRemoveDuplicates(ListAppend(generateTextlst,getText))>
</cfloop>
</cfloop>
<cfdump var="#str#"><br /><br>
<cfdump var="#generateStr#"><br /><br />
<cfdump var="#generateLst#"><br /><br />
<cfdump var="#generateTextlst#">
生成的输出
对于generateStr
Previoushistory-Diagnosis= 085.2 ,Controlled-Diagnosis= 085.2 ,Controlled-Diagnosis= 153.2 ,Active-Diagnosis= 209.15 ,151.9
对于generateLst
Cutaneous leshmaniasis, Asian desert, Asian desert cutaneous leishmaniasis, Cancer of colon, descending colon, MAL CARCINOID DESC COLON, Stomach cancer= UNCONTROLLED
适用于generateTextlst
[empty string]
现在问题在于
<cfdump var="#generateStr#"><br /><br />
<cfdump var="#generateLst#"><br /><br />
现在 generateStr 的值为:
Previoushistory-Diagnosis = 085.2,Controlled-Diagnosis = 085.2 ,受控诊断= 153.2,主动诊断= 209.15,151.9
我可以像这样改变它吗
085.2,085.2,153.2,209.15,151.9
并使用删除的值附加到与之相关的第二个列表
皮肤leshmaniasis,亚洲沙漠* =以前的历史 - 诊断 *,亚洲 沙漠皮肤利什曼病* =对照 - 诊断 *,结肠癌, 降结肠* =受控诊断 *,MAL CARCINOID DESC COLON * =主动诊断 *,胃癌= UNCONTROLLED
我很困惑如何使用几个列表元素来实际实现它,就像上面的
一样任何指导
答案 0 :(得分:1)
这应该足以让你入门。我修改了你的cfloop
:
<cfloop list="#string1#" index="k" delimiters="~">
<cfset getString = GetToken(k,1,'#delimis#')>
<cfset getText = Trim(GetToken(getString,1,'='))> <!--- this returns the text for example Previoushistory-Diagnosis --->
<cfset getValue = Trim(GetToken(getString,2,'='))> <!--- this returns the value for example 085.2 --->
<cfset generateStr = ListRemoveDuplicates(ListAppend(generateStr,getValue))>
<cfset getID = GetToken(k,2,'#delimis#')>
<cfset newText = getID & "=" & getText> <!--- this concatenates the two strings together with = inbetween --->
<cfset generateLst = ListRemoveDuplicates(ListAppend(generateLst,newText))>
<cfset getText = GetToken(k,3,'#delimis#')>
<cfset generateTextlst = ListRemoveDuplicates(ListAppend(generateTextlst,getText))>
</cfloop>
将generateStr
输出为:
085.2,153.2,209.15,
并且generateLst
为:
Cutaneous leshmaniasis, Asian desert=Previoushistory-Diagnosis, Cutaneous leshmaniasis, Asian desert cutaneous leishmaniasis=Controlled-Diagnosis, Cancer of colon, descending colon=Controlled-Diagnosis, MAL CARCINOID DESC COLON=Active-Diagnosis, Cutaneous leshmaniasis, Stomach cancer= UNCONTROLLED=151.9
请注意generateStr
列表末尾有一个空值。这是因为str
列表中的最后一个值与其他值不符。值151.9
位于开头,而不是=
字符之后。
这反过来也会抛弃generateLst
列表。它使最后一个值变为Stomach cancer= UNCONTROLLED=151.9
,我认为你不需要它。
因此,您需要更多地利用这一点来完成您的需求。显然,这些是您在尝试解析不一致的数据字符串时遇到的问题。
答案 1 :(得分:0)
这样的事可能有用:
NewList = ListFirst(generateLst); //Cutaneous leshmaniasis
for (i = 2; i lte ListLen(generateLst); i++) {
NewList = ListAppend(ListGetAt(generateLst, i) & "=");
//Cutaneous leshmaniasis, Asian desert=
TempText = ListGetAt(generateStr, i -1); //Previoushistory-Diagnosis= 085.2
TempText2 = ListLast(TempText, "="); // 085.2
NewList &= TempText2; //Cutaneous leshmaniasis, Asian desert=085.2
}
NewList = Replace(NewList, ",", ", ", "all);