首页 > 解决方案 > 将 Coldfusion 变量的内容解析为单独的变量

问题描述

好的,所以我一直在用我的头撞这个,但一无所获。我一直在尝试获取变量的内容并将包含的字符串解析为部分,然后将这些部分提取到 5 个单独的变量中。看起来很简单吧?好吧,至少对我来说,它根本没有被证明是简单的。

所以我有一个变量(PageContent),其中包含来自 CFHTTP 请求的修剪内容。PageContent 变量现在包含:

<tdnowrapalign=right>07/18/2020 13:00</td>
<tdalign=right>1002.12</td>
<tdalign=right>2,874,887</td>
<tdalign=right>12,766</td>
<tdalign=right>13,038</td>

似乎应该有一种简单的方法来编写一个循环,该循环将遍历“PageContent”变量中的标签,将每个标签的内容分配给不同的变量。但是,我尝试解析变量中的数据的每一种方式,要么得到一个错误(复杂对象类型无法转换为简单值。),要么我最终得到了在循环中重复的“PageContent”变量中最初拥有的内容.

例如,如果我有一个循环将运行 5 次迭代,并且可以获取将每个标记分配给变量的内容,那么所需的结果将是:

DateTime = "07/18/2020 13:00"
Elevation = "1002.12"
Storage = "2,874,887"
Outflow = "12,766"
Inflow = "13,038"

在尝试了我可以在这里和其他地方在线找到的每个示例之后,我现在正在进行第 100 次尝试。现在我正在尝试使用正则表达式来获取标签的内容并将它们分配给变量,但那里没有运气。我最终得到的是将 PageContent 变量的全部内容填充到每个变量中。结果并不出人意料,因为我不知道区分3个相同的“tdalign”标签的方法,但似乎至少第一个变量会起作用,因为标签是不同的“tdnowrapalign”。

<cfset i=5/>
<cfloop index = "LoopCount" from = "1" to = #i#> 
    <cfif i EQ 1>
        <cfset dataDateTime = Replace(PageContent, "<[tdnowrapalign][^>]*>(.+?)</[td]>","","ALL")>
    <cfelseif i EQ 2>
        <cfset elevation = Replace(PageContent, "<[tdalign][^>]*>(.+?)</[td]>","","ALL")>
    <cfelseif i EQ 3>
        <cfset storage = Replace(PageContent, "<[tdalign][^>]*>(.+?)</[td]>","","ALL")>
    <cfelseif i EQ 4>
        <cfset outflow = Replace(PageContent, "<[tdalign][^>]*>(.+?)</[td]>","","ALL")>
    <cfelseif i EQ 5>
        <cfset inflow = Replace(PageContent, "<[tdalign][^>]*>(.+?)</[td]>","","ALL")>
    </cfif>

    <cfoutput>
    <cfif isdefined("dataDateTime")>
        dataDateTime = #dataDateTime#<br>
    </cfif>
    <cfif isdefined("elevation")>
        elevation = #elevation#<br>
    </cfif>
    <cfif isdefined("storage")>
        storage = #storage#<br>
    </cfif>
    <cfif isdefined("outflow")>
        outflow = #outflow#<br>
    </cfif>
    <cfif isdefined("inflow")>
        inflow = #inflow#<br>   
    </cfif>
    </cfoutput>

    <cfset i = i - 1> 

</cfloop>

有谁知道是否有办法达到我所描述的预期结果,我最终得到 5 个变量,其中包含“PageContent”变量中包含的标签的内容?

标签: regexparsingcoldfusion

解决方案


一种方法是这样的

<cfset PageContent = '<tdnowrapalign=right>07/18/2020 13:00</td>
<tdalign=right>1002.12</td>
<tdalign=right>2,874,887</td>
<tdalign=right>12,766</td>
<tdalign=right>13,038</td>' />

<cfset data = ListToArray(PageContent, '</td>', false, true) />

<cfset DateTime = ListLast(data[1], '>') />
<cfset Elevation = ListLast(data[2], '>') />
<cfset Storage = ListLast(data[3], '>') />
<cfset Outflow = ListLast(data[4], '>') />
<cfset Inflow = ListLast(data[5], '>') />

演示:https ://trycf.com/gist/b4f3b630bd1cbdc505d07a7d79b68ef5/acf?theme=monokai


推荐阅读