Ладно, я уже какое-то время бился головой об этот и ни к чему не пришел. Я пытался взять содержимое переменной и проанализировать содержащуюся строку на части, которые затем будут вставлены в 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"

Попробовав каждый пример, который я смог найти здесь и в других местах в Интернете, я сейчас делаю что-то вроде своей сотой попытки. Теперь я пытаюсь использовать регулярные выражения, чтобы захватить содержимое тегов и назначить их переменным, но безуспешно. В итоге я получил все содержимое переменной 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»?

2
user3788682 19 Июл 2020 в 03:18

1 ответ

Лучший ответ

Один из способов сделать это было бы так

<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/b4f3b630mebd1cd5d03b5d5d5d5d5d5d5d5d1b5d5d1 / а>

1
Alex Baban 19 Июл 2020 в 01:24