query-string - 进度 4gl OpenEdge 解析键/值对字符串又名查询字符串

标签 query-string string-parsing progress-4gl openedge 4gl

我找不到任何关于如何解析一串键/值巴黎又名查询字符串的信息,如下所示:

FieldType="String"&FieldFormat="^[a-z0-9!#$%&'*+/=?^_`{|}~-]+$"

字段分隔符可能包含在值中,如上面的示例 这不能用作网络请求参数列表。

我发现了这个:running a loop on a comma delimited list of items progress 4GL

但是 entry() 并不关心数据是否在 qoutation 中。

= 编辑=

所以我找到了一个不太理想的解决方案,我希望没有人需要模仿

DO jj=1 TO NUM-ENTRIES(curr,"&"):

            DEFINE VARIABLE pos AS INTEGER     NO-UNDO.
            ASSIGN 
                k   = entry( 1, ENTRY(jj,curr,"&"), "=")                
                v   = entry( 2, ENTRY(jj,curr,"&"), "=")
                pos = INDEX( curr,  k + "=" ).

            /* Check if this is a qouted value*/
            IF NUM-ENTRIES( SUBSTRING( curr, pos, ABS( INDEX(curr, "&", pos) - pos) ) ,'"') > 1 THEN 
                ASSIGN v = ENTRY( 2, SUBSTRING( curr, pos) , '"').  

end.

IF 语句就是噩梦的组成部分!

最佳答案

根据 Tom 和 TheMadDBA 的答案构建。

假设:第一个 & 将是我们想要拆分的那个。

define variable cQryString as character no-undo.
define variable iSplitIndex as integer no-undo.
define variable cType as character no-undo format "x(30)" label "  Type".
define variable cFormat as character no-undo format "x(30)" label "Format".

assign 
  cQryString = 'FieldType=String&FieldFormat="^[a-z0-9!#$%&~'*+/=?^_`~{|}~~-]+$"' 
  iSplitIndex = index(cQryString, "&") 
  cType = substring(cQryString, 1, iSplitIndex - 1)
  cFormat = substring(cQryString, iSplitIndex + 1, length(cQryString))
  cType = substring(cType, index(cType, "=") + 1, length(cType))
  cFormat = substring(cFormat, index(cFormat, "=") + 1, length(cFormat))
  .

assign cType = entry(2, cType, '"') when substring(cType, 1, 1) = '"'.
assign cFormat = entry(2, cFormat, '"') when substring(cFormat, 1, 1) = '"'.

display
  cType skip
  cFormat
with side-labels.

关于query-string - 进度 4gl OpenEdge 解析键/值对字符串又名查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30645576/

相关文章:

progress-4gl - 从 Progress OpenEdge 数据库中的表中获取前 100 条记录(例如 SELECT TOP 100..)

scala - 将查询字符串转换为 Scala 中的映射

java - 在解析本地化数字期间,当错误输入不会导致 ParseException 时,如何处理这种情况?

c++ - 我可以从 Progress OpenEdge ABL 调用 C++ 代码吗?

c# - 读取仅包含字符串的行并将内容合并到上一行

f# - 在F#中,是否可以使用tryParse函数来推断目标类型

progress-4gl - 从临时表创建数据库表(通过代码)

javascript - 我可以使用数字、可能相等(非唯一)键进行 URL 查询吗?

javascript - 在没有 session 的情况下将异常消息传递到错误页面 ASP.NET 的最佳实践

javascript - 如何在Backbone中获取url参数?