将 Coldfusion 变量的内容解析为单独的变量
Parse the contents of a Coldfusion variable into separate variables
好吧,我已经为此苦苦思索了一段时间,但一无所获。我一直在尝试获取一个变量的内容并将包含的字符串解析为多个部分,然后这些部分将被摄取到 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”变量中包含的标签的内容?
一种方法是这样
<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
好吧,我已经为此苦苦思索了一段时间,但一无所获。我一直在尝试获取一个变量的内容并将包含的字符串解析为多个部分,然后这些部分将被摄取到 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”变量中包含的标签的内容?
一种方法是这样
<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