powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как проверить что входной параметр является МАССИВОМ?
15 сообщений из 15, страница 1 из 1
Как проверить что входной параметр является МАССИВОМ?
    #32806897
-=guest=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как проверить что входной параметр является МАССИВОМ?
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32806932
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
on error do <ErrorManager>
alen(<ParamName>)
on error

Если параметр не массив возникнет ошибка 232.
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32806976
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В FoxPro массив не может иметь нулевой размерности. Т.е. хотя бы один элемент в нем должен быть. Значит можно проверить тип первого элемента массива:

Код: plaintext
1.
2.
3.
4.
5.
FUNCTION MyFunc
PARAMETERS tvPar

IF TYPE("tvPar[1]")<>"U"
* Переданный параметр - МАССИВ
ENDIF
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32807686
-=guest=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Владимир
Изящное решение!
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32809257
Андрей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как явно объявить входной параметр массивом?
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32809392
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему, никак.
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32809402
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И по значению массив, по-моему, тоже никак передать нельзя, только по ссылке.
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32809416
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как явно определить что входной параметр Currency или Integer ?
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32809692
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Urri

И по значению можешь передать

dimension aDim(1,2)

aDim(1,1)=1
aDim(1,2)=2

Procedure TestDim
lparameters taDim

?taDim(1)
?taDim(2)
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32809695
Андрей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Явно сказать, что входной параметр - массив, можно так:

Function Dim_to_str
Lparameter Mas,Razdel
Local N
N = ALEN(Mas)
Dimension Mas(N)
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32809696
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для полноты

dimension aDim(1,2)

aDim(1,1)=1
aDim(1,2)=2
TestDim(aDim)

Procedure TestDim
lparameters taDim

?taDim(1)
?taDim(2)
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32809782
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, в FoxPro в принципе нет возмоности указать чем является входной параметр. Ни какого он типа, ни то, является ли он массивом.

Однако есть специальные директивы, предназначенные для компилятора.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
FUNCTION MyFunc
PARAMETER tvPar

EXTERNAL ARRAY tvPar
?tvPar[ 1 ]

RETURN
ENDFUNC

В данном контексте, команда EXTERNAL предназначена прежде всего для компилятора FoxPro. Чтобы на этапе компиляции такого кода не было ругани, что tvPar - это не массив. Т.е. мы явно указываем компилятору, что tvPar - это именно массив.

Но вот, является ли он при исполнении программы массивом на самом деле - далеко не факт.

Если параметр может как быть массивом, так и не быть, то лучше все-таки всегда этот параметр передавать именно как массив. Поскольку обращение к массиву только по имени означает обращение к первому элементу массива. А в командах присвоения - ко всем элементам массива одновременно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DIMENSION aTest( 2 )
aTest =  1 
?aTest[ 1 ]
?aTest[ 2 ]
aTest[ 1 ] =  2 
?aTest
?aTest[ 1 ]
?aTest[ 2 ]
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32811294
Андрей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EXTERNAL ARRAY tvPar - это то, что надо ,
для пресечения ругани компилятора
Спасибо, Владимир!
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32811676
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я или передаю масив через & или использую

set udfparms to refer
...
set udfparms to value

все работает как часы.
...
Рейтинг: 0 / 0
Как проверить что входной параметр является МАССИВОМ?
    #32812866
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Александр!

Ты имел в виду через @
А заодно почитай хелп на предмет того, чем отличается вызов процедуры
от вызова функции (DO Some WITH ... от =some() ), и на что именно влияет SET
UDFPARAMS...

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как проверить что входной параметр является МАССИВОМ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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