【问题标题】:LotusScript View ColumnValues dealing with embedded arrays处理嵌入式数组的 LotusScript View ColumnValues
【发布时间】:2013-05-13 13:05:18
【问题描述】:

当使用 LotusScript 访问 ColumnValues(通过 NotesDocument 或 NotesViewEntry 访问的值的变体数组)时,某些数组元素可能包含一个或多个元素中的嵌入数组。例如:

doc.ColumnValues(0) = "A"
doc.ColumnValues(1) = ["A", "B"]
doc.ColumnValues(2) = 4
...

有没有办法一次性将所有数组值分配给一个数组?如果您将 ColumnValues 数组分配给变量变量,那么这仅在数组元素中没有嵌入数组数据时才有效,即:ColumnValues(1) = "AB" 而不是 "[A,B]" 例如:

dim v as variant
v = doc.ColumnValues

如果存在数组,则此分配失败,但如果所有元素都是标量则有效。一种解决方法是确保所有 ColumnValue 都是标量(不是数组),但这不能保证。我唯一的其他解决方法是遍历所有 ColumnValues 并检查一个数组:

For i = 1 to ubound(doc.ColumnValues)   'or other columcount var!
  v=doc.ColumnValues(i)
  if isarry(v) then
    a=join(v,";")
  else
    a=v
  end if
Next

上述方法有效,但对于许多列来说速度很慢,有人有替代方法吗?

【问题讨论】:

    标签: lotus-notes lotus-domino lotusscript


    【解决方案1】:

    好的,经过一些测试,我发现了以下内容:如果我使用 forall 循环...

    dim cvals() as variant
    redim cvals(ncolsreqd)
    i = 0
    ForAll v In doc.columnValues
        If IsArray(v) Then
            cvals(i) = Join(v, ";")
        Else
            cvals(i) = v
        End if
        i = i + 1
    End ForAll
    Print "v:= " & Join(cvals, ",")
    

    然后 ColumnValues 似乎只检索一次,并且许多列的性能不受影响。 (如果使用 For 循环,则每次查找整个数组,然后从数组中选择 1 个元素)。

    【讨论】:

      【解决方案2】:

      另一个想法:如果您要检索的数据几乎总是标量,您可以使用单个分配给变体:

      dim v as variant
      v = doc.ColumnValues
      

      然后,如果由于类型不匹配(嵌入式数组)而导致此错误,则仅在 forall 循环中重新处理数据作为错误处理的一部分,然后恢复。在大多数情况下避免了 forall 循环,并且总体上应该更快。 (但是,如果大部分数据是多值的,那么错误/数组处理路径可能会更慢)!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多