Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Разделитель разрядов / 10 сообщений из 10, страница 1 из 1
12.10.2018, 15:06
    #39716727
Serg197311
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель разрядов
Системный разделитель разрядов на компе - ,
В одну из функций стороннего приложения необходимо отправить в качестве аргумента массив из 3х цифр.....
так - array(0.5,0.3,0.4) - работает....
Но я никак не могу догадаться как сделать это программно... Eval естественно выдает формат числа но с разделителем ","
В поле пишу 0.5 - а оно воспринимается как string.... ни тот ни другой массив эта сторонняя функция воспринимать не хочет....
Можно ли сделать что нибудь кроме изменения знака разделения разрядов на компе?
...
Рейтинг: 0 / 0
12.10.2018, 15:33
    #39716759
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель разрядов
Ни фига не понять...
Откуда, в какой форме, берутся данные для формирования массива?
...
Рейтинг: 0 / 0
12.10.2018, 15:46
    #39716778
Serg197311
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель разрядов
array(0.5,0.3,0.4) - это я пишу руками прямо в коде - работает
Мне нужно сформировать эту строку программно - или взять данные с полей или еще каким -нибудь образом вычислить. Каким - не имеет пока значения.
Проблема в том, что если я формирую массив как array(переменная1,Переменная2,переменная3) то, если эти переменные имеют числовой формат - то разделитель разрядов - запятая и функция не работает. Если сделать эти переменные текстовыми и поставить вместо запятой точку - то функция тоже не хочет работать.
Путь в лоб - замена системного разделителя разрядов на компе. Хотелось бы обойтись без этого.
Соответственно вопрос - нет ли какой нибудь хитрости или костыля для такого случая?
Стронная функция - из CATIA.
...
Рейтинг: 0 / 0
12.10.2018, 16:09
    #39716797
Разделитель разрядов
Serg197311Проблема в том, что если я формирую массив как array(переменная1,Переменная2,переменная3) то, если эти переменные имеют числовой формат - то разделитель разрядов - запятая и функция не работает. Странно. То, что вы видите в числовом поле "," или "." не имеет значения, если не выполняется преобразования числа в текст, а array этого, вроде, не делает.
Можно иначе:
Код: vbnet
1.
2.
3.
4.
Dim arr(0 to 2) As Double
arr(0)=переменная1
arr(1)=Переменная2
arr(2)=переменная3
...
Рейтинг: 0 / 0
12.10.2018, 17:44
    #39716840
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель разрядов
Что значит "функция не работает"? Ошибка?
И что за сторонняя программа? Вызов dll? Вы уточните, а то не пойми что.

Если работает array(0.5,0.3,0.4), но не работает с переменными, то скорее всего функция ожидает массив Double, а переменные, которые вы передаете не кастытся в Double по умолчанию. Сделайте это явно:
Код: vbnet
1.
array(CDbl(переменная1), CDbl(Переменная2), CDbl(переменная3))
...
Рейтинг: 0 / 0
12.10.2018, 17:47
    #39716842
Serg197311
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель разрядов
Кривцов Анатолий Странно. То, что вы видите в числовом поле "," или "." не имеет значения, если не выполняется преобразования числа в текст, а array этого, вроде, не делает.
Можно иначе:
Код: vbnet
1.
2.
3.
4.
Dim arr(0 to 2) As Double
arr(0)=переменная1
arr(1)=Переменная2
arr(2)=переменная3


Я пробовал через функции.....
Eval(me!Поле.Value)..... Перед самим вызовом функции смотрю в дебаггере - значение - числовое, разделитель разрядов - запятая, функция вызывается - и ошибка(что то именно неправильный тип данных говорит)
Пишу тупо в коде
Dim myarray(2) as Variant
myarray=array(0.5,0.3,0.4)
отправляю на вход функции - работает.....
тоже ничего пока понять не могу.....
ну попробую в понед через переменные.....
...
Рейтинг: 0 / 0
12.10.2018, 17:52
    #39716844
Serg197311
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель разрядов
MrShinЧто значит "функция не работает"? Ошибка? - да, пишет что-то про несоответствие типов данных
MrShinИ что за сторонняя программа? Вызов dll? Вы уточните, а то не пойми что.
Ну как так на пойми что..... писал выше - CATIA, конструкторская 3D программа

MrShinЕсли работает array(0.5,0.3,0.4), но не работает с переменными, то скорее всего функция ожидает массив Double, а переменные, которые вы передаете не кастытся в Double по умолчанию. Сделайте это явно:
Код: vbnet
1.
array(CDbl(переменная1), CDbl(Переменная2), CDbl(переменная3))


Спасибо!!!! в понед попробую - ну не бывает же чудес, должен же быть способ)
...
Рейтинг: 0 / 0
15.10.2018, 07:35
    #39717375
Serg197311
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель разрядов
Получилось так
Dim myarray(2) as Variant
Dim переменная1 as double
Dim переменная2 as double
Dim переменная2 as double
Myarray=array( переменная1 , переменная2, переменная2)
...
Рейтинг: 0 / 0
15.10.2018, 12:42
    #39717533
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель разрядов
Serg197311Получилось такА с явной конвертацией, как я предложил - не работает? По идее это то же самое должно быть. Хотя, при передаче параметров в сторонние функции могут быть нюансы с временными переменными, используемыми для хранения результатов функций
...
Рейтинг: 0 / 0
15.10.2018, 12:52
    #39717542
Serg197311
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель разрядов
MrShin А с явной конвертацией, как я предложил - не работает?

создаем переменные как Variant, явно конвертируем через cdbl() - работает
А вот если сам массив обьявить не Variant а double - не работает, как не извращайся.....
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Разделитель разрядов / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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