LotusScript View ColumnValues, работающий со встроенными массивами

При работе с 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

Если массив присутствует, это назначение не выполняется, но работает, если все элементы скалярные. Одним из обходных путей является обеспечение того, что все ColumnValues ​​являются скалярными (не массивами), но это не может быть гарантировано. Единственный другой обходной путь, который у меня есть, - это перебрать все 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

Вышеописанное работает, но очень медленно для многих столбцов, есть у кого-нибудь альтернативный подход?

2 ответа

Решение

Хорошо, после некоторого тестирования, я обнаружил следующее: Если я использую цикл 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 элемент).

Другая идея: если данные, которые вы хотите получить, почти всегда скалярны, вы можете использовать одно назначение для варианта:

dim v as variant
v = doc.ColumnValues

Затем, если эти ошибки вызваны несоответствием типов (встроенный массив), то только повторная обработка данных в цикле повторного выполнения как часть обработки ошибок, а затем возобновление. Избегает повторной петли в большинстве случаев и должен быть быстрее в целом. (Однако, если большая часть данных многозначна, маршрут обработки ошибок / массивов может быть медленнее)!

Другие вопросы по тегам