Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 работа с массивами + Split()  [new]
Sehensucht!
Member

Откуда: Москва
Сообщений: 60
Товарищи, подружите меня с массивами, пожалуйста!
Что не так делаю?

Dim arr(2) As Variant
arr = Split(Me.OpenArgs, ";")

' Me.OpenArgs = "14;0"
Ругается: Compile error. Can't assign to array.

Или это только через циклы делается???
17 окт 03, 18:06    [381935]     Ответить | Цитировать Сообщить модератору
 Re: работа с массивами + Split()  [new]
Geo
Member

Откуда:
Сообщений: 6883
Использование массивов (хелп а97)
Имеется возможность описать массив для работы с набором значений одного типа данных. Массив представляет собой одну переменную с множеством ячеек памяти для хранения значений, тогда как обычная переменная имеет только одну ячейку, в которой может храниться только одно значение. При необходимости сослаться на все элементы массива можно ссылаться на массив как целое. Возможны также ссылки на его отдельные элементы.

Например, для записи денежных затрат на каждый день календарного года можно описать один массив с 365 элементами, вместо того, чтобы описывать 365 переменных. Каждый элемент массива содержит одно значение. Следующая инструкция описывает массив curExpense с 365 элементами. По умолчанию индексация массива начинается с нуля, так что верхняя граница массива - 364, а не 365.

Dim curExpense(364) As Currency


Чтобы задать значение отдельного элемента, надо указать его индекс. В следующем примере всем элементам массива присваивается исходное значение 20.

Sub FillArray()

Dim curExpense(364) As Currency
Dim intI As Integer
For intI = 0 to 364
curExpense(intI) = 20
Next
End Sub


Для того, чтобы изменить индекс первого элемента массива, по умолчанию равный 0, на 1, можно использовать инструкцию Option Base в начале модуля. В следующем примере инструкция Option Base изменяет индекс первого элемента , а инструкция Dim описывает массив curExpense с 365 элементами.

Option Base 1

Dim curExpense(365) As Currency


Допускается также явное задание нижней границы индексов массива с помощью предложения To, как продемонстрировано в следующем примере.

Dim curExpense(1 To 365) As Currency

Dim strWeekday(7 To 13) As String


Запоминание значений Variant в массивах

Создать массив значений Variant можно двумя способами. Первый способ - это описание массива с типом данных Variant, как показано в следующем примере:

Dim varData(3) As Variant

varData(0) = "Мария Петрова"
varData(1) = "Зеленая, 19"
varData(2) = 38
varData(3) = Format("06-09-1952", "General Date")


Другой способ - это присвоение массива, возвращаемого функцией Array, переменной Variant, как продемонстрировано в следующем примере.

Dim varData As Variant

varData = Array("Иван Петров", "Зеленая, 19", 38, _
Format("06-09-1952", "General Date"))


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

MsgBox "Записаны данные для " & varData(0) & "."


...
17 окт 03, 18:15    [381951]     Ответить | Цитировать Сообщить модератору
 Re: работа с массивами + Split()  [new]
Sehensucht!
Member

Откуда: Москва
Сообщений: 60
to Geo:
Спасибо, читать-то я умею :) Только вопрос был в том, как в переменную типа "массив" записать массив значений, который вернула ф-я Split(). Я сделал через For Each...
17 окт 03, 18:25    [381972]     Ответить | Цитировать Сообщить модератору
 Re: работа с массивами + Split()  [new]
АлексейЕ
Guest
Все дело в строке Dim arr(2) As Variant
Dim arr As String

arr = Split(Me.OpenArgs, ";")

В данном случае массив присваивается переменной arr. Можешь ее объвить не как Variant, а как String. Так экономичнее. Всеравно Split() возвращает строковой массив.
Так если запустишь такой код
Dim arr As Variant

arr = Split(Me.OpenArgs, ";")
Debug.Print VarType(arr)
Debug.Print VarType(arr(0))
Debug.Print arr(1)

то на выходе получишь

8200
8
0

т.е.
vbString 8 String
vbArray 8192 Array
См. хелп по VarType()
17 окт 03, 18:32    [381982]     Ответить | Цитировать Сообщить модератору
 Re: работа с массивами + Split()  [new]
Анатолий (Киев )
Guest
Массив должен быть динамическим и типа String.
Dim arr() As String 

arr = Split(Me.OpenArgs, ";")
Msgbox arr(0)

Но это Вас не спасет, если в функцию Split() передать пустую строку.
Получите ошибку.
Лучше использовать переменную Variant
Dim v As Variant

v = Split(Me.OpenArgs, ";")
If IsArray(v) Then
If UBound(v) >= 0 Then
MsgBox v(0)
End If
End If
17 окт 03, 18:38    [381993]     Ответить | Цитировать Сообщить модератору
 Re: работа с массивами + Split()  [new]
Sehensucht!
Member

Откуда: Москва
Сообщений: 60
Спасибо, Друзья, с вашей помощью я разобрался :)
17 окт 03, 18:43    [382000]     Ответить | Цитировать Сообщить модератору
 Re: работа с массивами + Split()  [new]
Remedios
Member

Откуда:
Сообщений: 5
ой :),конечно же
Dim i As Integer
Dim arr(1), v As Variant
i = 0
For Each v In Split(Me.OpenArgs, ";")
arr(i) = v
i = i + 1
Next
8 янв 04, 18:17    [484658]     Ответить | Цитировать Сообщить модератору
 Re: работа с массивами + Split()  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Когда i станет >1, эта программа работать перестанет.
8 янв 04, 18:23    [484667]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить