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

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

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

Или это только через циклы делается???
...
Рейтинг: 0 / 0
работа с массивами + Split()
    #32297124
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использование массивов (хелп а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
работа с массивами + Split()
    #32297139
Sehensucht!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Geo:
Спасибо, читать-то я умею :) Только вопрос был в том, как в переменную типа "массив" записать массив значений, который вернула ф-я Split(). Я сделал через For Each...
...
Рейтинг: 0 / 0
работа с массивами + Split()
    #32297145
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все дело в строке 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
работа с массивами + Split()
    #32297149
Массив должен быть динамическим и типа 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
работа с массивами + Split()
    #32297151
Sehensucht!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Друзья, с вашей помощью я разобрался :)
...
Рейтинг: 0 / 0
работа с массивами + Split()
    #32370865
Remedios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой :),конечно же
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
работа с массивами + Split()
    #32370872
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Когда i станет >1, эта программа работать перестанет.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / работа с массивами + Split()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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