|
|
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Народ, помогите плиз. В финкцию или процедуру передается динамический массив. Как проверить пустой он или нет???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 16:22 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
В каком смысле пустой? Ubound = LBound? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 16:30 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
MelkiadesВ каком смысле пустой? Ubound = LBound? Не верно вырозился .... инициализирован(массив) ли он или нет????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 16:36 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Катяра MelkiadesВ каком смысле пустой? Ubound = LBound? Не верно вырозился .... инициализирован(массив) ли он или нет????? т.е. если его размер НИГДЕ не задавался. будет вроде -1 в UBound ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 17:38 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Если массив не инициализирован то попытка вызвать Lbound Ubound вывалится с ошибкой. Его практически никак проверить нельзя(если не ошибаюсь), кроме как ловить эту ошибку. Единственный приличный обходиной путь, на мой взгляд - обьявить его параметром as variant и этом случае если его не передавать то можно будет проверить по IsMissing. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 18:02 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Самый простой подход, работающий для массивов всех типов: обработка ошибки 9. Ниже я покажу способ, работающий для всех массивов, кроме строковых, на примере массива типа Long: В модуле: Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes As Long) Public Declare Function VarPtrArray Lib "msvbvm60.DLL" Alias "VarPtr" (Ptr() As Any) As Long Public Function MassivInitzializirovan(lngTest As Long) As Boolean Dim lngResult As Long CopyMemory lngResult, ByVal lngTest, 4 MassivInitzializirovan = lngResult End Function В форме: Private Sub Command1_Click() Dim blnResult As Boolean Dim lngArray() As Long blnResult = MassivInitzializirovan(VarPtrArray(lngArray)) Debug.Print blnResult ReDim lngArray(1) blnResult = MassivInitzializirovan(VarPtrArray(lngArray)) Debug.Print blnResult End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 18:03 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
есть дедовский способ в массиве Mass(i) mass(0) резервируешь под размерность массива а данные номеруешь от 1. а потом, когда юзаешь в цикле че-та типа этого Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2007, 16:13 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
мне все же казалось что ubound даст -1 а что, кстати, мешает его инициализоровать нулем сразу? а то напридумывали фигни какой-то про варианты, 0 элемент как размер... жуть... аффтопитезь: объект либо именован, либо не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 09:44 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Да, возиться с вычислением размера массива на обработчиках ошибок - себе дороже. Лучше инициализировать сразу нулем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 10:38 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Держите пару функций: ------------------------------------------ GetArrayDimensions - возвращает размерность массива или 0 если массив не инициализирован. UBoundArray - возвращает кол-во элементов в указанной размерности массива или -1 если данная размерность не инициализирована. То есть UBoundArray неинициализированного массива вернет -1. ------------------------------------------ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 12:04 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
по-моему, UBound и так -1 вернет. а вы чего-то замутили... жуть... так вот. не легче ли вместо копирования приписать ОДНУ единственную строчку ? redim в 0. ??? аффтопитезь: объект либо именован, либо не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 12:07 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Aklinпо-моему, UBound и так -1 вернет. Ubound неинициализированного массива вернет только ошибку. Которую надо перехватывать и обрабатывать - можно, правда, идти и таким путем. Aklinтак вот. не легче ли вместо копирования приписать ОДНУ единственную строчку ? redim в 0. ??? Не лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 12:23 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
AndrF Aklinпо-моему, UBound и так -1 вернет. Ubound неинициализированного массива вернет только ошибку. Которую надо перехватывать и обрабатывать - можно, правда, идти и таким путем. Aklinтак вот. не легче ли вместо копирования приписать ОДНУ единственную строчку ? redim в 0. ??? Не лучше. если инициализоровать нулем, ошибки НЕ будет. поясните, почему не легче ,если вам теперь приходиться лезть в память, а если ошибка при работе с памятью? инициализоровать нулем - ГОРАЗДО проще, чем то, что вы показали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 13:52 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
к тому же я сэкономил КУЧУ бестолкового кода. ну а если делать все через ж, то это гораздо проще, чем ваш вариент: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. аффтопитезь: объект либо именован, либо не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 13:56 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34428087&tid=2164233]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 507ms |

| 0 / 0 |
