Фильтрация многомерного массива в VBScript - PullRequest
4 голосов
/ 16 февраля 2011

Я пытаюсь отфильтровать двумерный массив с помощью VBScript, но встроенная в VBScript функция «фильтр» работает только с одномерными массивами.Я использую массив «rs.GetRows ()», так есть ли простая функция, которая работает с двумерными массивами?

РЕДАКТИРОВАТЬ: это не о фильтрации записей базы данных, а о фильтрации многомерных массивов.Я знаю, что могу фильтровать эти записи на уровне базы данных, но это не то, что я хочу.Поэтому мне нужна функция фильтра для многомерных массивов.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011
Option explicit

' actual function
Public function filter2dArray(a, text)
    Dim i
    For i = ubound(a) to lbound(a) step -1
        If instr(join(a(i), vbTab), text) = 0 Then
            ' no match. switch it with ubound and delete ubound
            a(i) = a(ubound(a))
            ReDim preserve a(ubound(a)-1)
        End If
    Next
    filter2dArray = a
End Function

' test code
Dim b, i
b = array(    array("row1", "monday", "work"), _ 
            array("row2", "tuesday", "work"), _
            array("row3", "wednesday", "free"))

b = filter2dArray(b, "work")

For i = lbound(b) to ubound(b)
    msgbox i & ": " & join(b(i), vbTab)
Next

Как вы и просили: функция фильтра для 2D-массивов.
Ограничения: она работает только для текстовых 2d-массивов и не имеет переключателя «Включить и сравнить», но этого нетрудно достичь.

0 голосов
/ 16 февраля 2011

Если требуется, чтобы вы не меняли временную структуру данных, то хорошей идеей будет циклический просмотр массива и отбрасывание элементов, не соответствующих вашим критериям фильтрации, или добавление элементов в новый массив. Я думаю, что количество записей, с которыми вы имеете дело, будет иметь большое значение, если вы выберете этот подход.

Альтернативой может быть загрузка вашего подмножества во временную таблицу, а затем выполнить фильтрацию по этому. Некоторый код / ​​указание данных может помочь сообщить лучший подход.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...