字符串操作代码更改

时间:2013-07-18 11:01:09

标签: coldfusion

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

中发布
<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

我很困惑如何使用几个列表元素来实际实现它,就像上面的

一样

任何指导

2 个答案:

答案 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);