1

以下代码正确创建代码,但仅在以下问题

<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的值如下:

以前的历史-诊断= 085.2,控制-诊断= 085.2,控制-诊断= 153.2,主动诊断= 209.15 ,151.9

我可以这样改吗

085.2 ,085.2 ,153.2 ,209.15 ,151.9

并使用删除的值附加到与它们相关的第二个列表,如下所示

皮肤利什曼病,亚洲沙漠* =以前的历史 - 诊断*,亚洲沙漠皮肤利什曼病 * =控制诊断*,结肠癌,降结肠* =控制诊断*,MAL CARCINOID DESC COLON* =主动诊断*,胃癌=不受控制

我只是很困惑我如何使用几个列表元素来真正实现它,就像上面一样

任何指导

4

2 回答 2

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,我假设您不想要。

因此,您需要多尝试一下才能最终确定您需要什么。显然,这些是您在尝试解析不一致的数据字符串时遇到的问题。

于 2013-07-18T13:00:30.543 回答
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);
于 2013-07-18T12:29:22.037 回答