Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / работа с массивами + Split() / 8 сообщений из 8, страница 1 из 1
17.10.2003, 18:06
    #32297114
Sehensucht!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами + Split()
Товарищи, подружите меня с массивами, пожалуйста!
Что не так делаю?

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

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

Или это только через циклы делается???
...
Рейтинг: 0 / 0
17.10.2003, 18:15
    #32297124
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами + Split()
Использование массивов (хелп а97)
Имеется возможность описать массив для работы с набором значений одного типа данных. Массив представляет собой одну переменную с множеством ячеек памяти для хранения значений, тогда как обычная переменная имеет только одну ячейку, в которой может храниться только одно значение. При необходимости сослаться на все элементы массива можно ссылаться на массив как целое. Возможны также ссылки на его отдельные элементы.

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

Код: plaintext
Dim curExpense( 364 ) As Currency


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

Код: plaintext
1.
2.
3.
4.
5.
6.
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 элементами.

Код: plaintext
1.
Option Base  1 
Dim curExpense( 365 ) As Currency


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

Код: plaintext
1.
Dim curExpense( 1  To  365 ) As Currency
Dim strWeekday( 7  To  13 ) As String


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

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

Код: plaintext
1.
2.
3.
4.
Dim varData( 3 ) As Variant
varData( 0 ) =  "Мария Петрова" 
varData( 1 ) =  "Зеленая, 19 "
varData( 2 ) =  38 
varData( 3 ) = Format( "06 - 09 - 1952 ",  "General Date" )


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

Код: plaintext
1.
2.
Dim varData As Variant
varData = Array( "Иван Петров" ,  "Зеленая, 19 ",  38 , _
Format( "06 - 09 - 1952 ",  "General Date" ))


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

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


...
...
Рейтинг: 0 / 0
17.10.2003, 18:25
    #32297139
Sehensucht!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами + Split()
to Geo:
Спасибо, читать-то я умею :) Только вопрос был в том, как в переменную типа "массив" записать массив значений, который вернула ф-я Split(). Я сделал через For Each...
...
Рейтинг: 0 / 0
17.10.2003, 18:32
    #32297145
АлексейЕ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами + Split()
Все дело в строке Dim arr(2) As Variant
Код: plaintext
1.
2.
Dim arr As String
arr = Split(Me.OpenArgs,  ";" )

В данном случае массив присваивается переменной arr. Можешь ее объвить не как Variant, а как String. Так экономичнее. Всеравно Split() возвращает строковой массив.
Так если запустишь такой код
Код: plaintext
1.
2.
3.
4.
Dim arr As Variant
arr = Split(Me.OpenArgs,  ";" )
Debug.Print VarType(arr)
Debug.Print VarType(arr( 0 ))
Debug.Print arr( 1 )

то на выходе получишь
Код: plaintext
1.
2.
  8200  
  8  
 0 

т.е.
vbString 8 String
vbArray 8192 Array
См. хелп по VarType()
...
Рейтинг: 0 / 0
17.10.2003, 18:38
    #32297149
работа с массивами + Split()
Массив должен быть динамическим и типа String.
Код: plaintext
1.
2.
Dim arr() As String 
arr = Split(Me.OpenArgs,  ";" ) 
Msgbox arr( 0 ) 

Но это Вас не спасет, если в функцию Split() передать пустую строку.
Получите ошибку.
Лучше использовать переменную Variant
Код: plaintext
1.
2.
3.
4.
5.
6.
Dim v As Variant
v = Split(Me.OpenArgs,  ";" )
If IsArray(v) Then
 If UBound(v) >=  0  Then
   MsgBox v( 0 ) 
 End If
End If 
...
Рейтинг: 0 / 0
17.10.2003, 18:43
    #32297151
Sehensucht!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами + Split()
Спасибо, Друзья, с вашей помощью я разобрался :)
...
Рейтинг: 0 / 0
08.01.2004, 18:17
    #32370865
Remedios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами + Split()
ой :),конечно же
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
...
Рейтинг: 0 / 0
08.01.2004, 18:23
    #32370872
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами + Split()
Когда i станет >1, эта программа работать перестанет.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / работа с массивами + Split() / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]