Пожалуйста, не блокируйте рекламу!

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн SIMFF

  • *****
  • 2299
  • Репутация: +194/-4
  • Пол: Мужской
Строковые функции
« : Декабря 05, 2011, 21:36:08 »

Test

Какая должна быть команда, что бы в параметрах БЭ Текстовая строка писалась по заданному шаблону, например:
ХХХХХ:ХХХ:ХХХХ (5-знаков : 3-знака : 4-знака) и как ограничить текстовую строку количеством знаков?

*

Оффлайн lsr

  • *****
  • 1268
  • Репутация: +247/-6
  • Пол: Мужской
  • http://sl-gdl.com
Re: Строковые функции
« Ответ #1 : Декабря 06, 2011, 05:45:14 »
Какая должна быть команда, что бы в параметрах БЭ Текстовая строка писалась по заданному шаблону, например:
ХХХХХ:ХХХ:ХХХХ (5-знаков : 3-знака : 4-знака) и как ограничить текстовую строку количеством знаков?

Если для простого текста то:
Создаете текстовой параметр напр.-Par
Значение параметра - любое кол-во символов
в 2D скрипте прописываете:

STR_TT=strsub (Par,2,4) !strsub- Команда (Наим. параметра, наччинать с второго символа- ну или с 0,1 и тд., всего четыре символа)

TEXT2 0,0, STR_TT ! X,Y, ТЕКСТ

*

Оффлайн SIMFF

  • *****
  • 2299
  • Репутация: +194/-4
  • Пол: Мужской
Re: Строковые функции
« Ответ #2 : Декабря 06, 2011, 13:17:34 »
lsr
Спасибо, информация полезная.
Но мне нужно немного иное. Мне хотелось бы что бы в текстовом параметре уже находились бы ограничения, например:

Если в первый блок (до двоеточия) 5 знаков, то при введении 6 знака, знак автоматически перескакивал бы в первую позицию второго блока, после двоеточия. И так далее - если во втором ограничение 3 знака, то 4 знак перескакивает в следующий блок.

Или возможность ввода знаков ограничена заданным параметром, например 5 знаков, 6 уже не введешь

*

Оффлайн lsr

  • *****
  • 1268
  • Репутация: +247/-6
  • Пол: Мужской
  • http://sl-gdl.com
Re: Строковые функции
« Ответ #3 : Декабря 06, 2011, 14:06:27 »
lsr
Спасибо, информация полезная.
Но мне нужно немного иное. Мне хотелось бы что бы в текстовом параметре уже находились бы ограничения, например:
Если в первый блок (до двоеточия) 5 знаков, то при введении 6 знака, знак автоматически перескакивал бы в первую позицию второго блока, после двоеточия. Или возможность ввода знаков ограничена заданным параметром, например 5 знаков, 6 уже не введешь

Придумайте формулу по которой вам необходимо собрать текст_блок
В основном скрипте или скрипте параметров:
VALUES "KL_B" "В-7.5_La_Ser","В-7.5"   ! ну или переменный параметр Par
VALUES "STR_2" "SIMFF AND CO",""
!Собираем строку
PARAMETERS  STR_Text=STRSUB (KL_B,0,NZ1)+" "+":"+STRSUB (STR_2,0,NZ2)

!Другой текст
PARAMETERS  STR_Text_2=STRSUB (Par_1,0,NZ1)+" "+":"+STRSUB (Par_2,0,NZ2)

*

Оффлайн SIMFF

  • *****
  • 2299
  • Репутация: +194/-4
  • Пол: Мужской
Re: Строковые функции
« Ответ #4 : Декабря 06, 2011, 14:30:45 »
Придумайте формулу по которой вам необходимо собрать текст_блок
Спасибо! Этот вариант подходит, так и сделаю!  :D (+1)

*

Оффлайн Tanya85

  • *****
  • 650
  • Репутация: +42/-1
Re: Строковые функции
« Ответ #5 : Марта 28, 2013, 13:34:25 »
Помогите пожалуйста с измененим размерности в скрипте.
Есть такое выражение

if bShowBottomHeight then
heightOfBottom = str((GLOB_ELEVATION) * 100, 2, 0)
contString[3] = bottomHeightNotation + " " + heightOfBottom
endif
Оно показывает на плане отметку низа ниши в см. например 90 , надо чтобы показывало 0,900 или 0.900 как по ГОСТ
Подскажите, как поправить это выражение, чтобы получить такой результат. 
Спасибо

*

Оффлайн VAO

  • **
  • 63
  • Репутация: +10/-0
  • Пол: Мужской
Re: Строковые функции
« Ответ #6 : Марта 28, 2013, 13:39:39 »
if bShowBottomHeight then
heightOfBottom = str((GLOB_ELEVATION) , 4, 3)
contString[3] = bottomHeightNotation + " " + heightOfBottom
endif

GLOB_ELEVATION без множителя 100 (без перевода в сантиметры)
4 (или 5, если предполагатся отметка выше 10 метров) количество цифр
3 - сколько знаков после запятой из общего количества (в данном случае из 4 или 5)

*

Оффлайн Tanya85

  • *****
  • 650
  • Репутация: +42/-1
Re: Строковые функции
« Ответ #7 : Марта 28, 2013, 13:53:01 »
GLOB_ELEVATION без множителя 100 (без перевода в сантиметры)4 (или 5, если предполагатся отметка выше 10 метров) количество цифр3 - сколько знаков после запятой из общего количества (в данном случае из 4 или 5)
Всё получилось! Большое Вам спасибо за помощ , оперативность и очень полный и понятный ответ+1

*

Оффлайн Valery W

  • *****
  • 5987
  • Репутация: +634/-14
  • Пол: Мужской
Re: Строковые функции
« Ответ #8 : Марта 31, 2013, 14:56:59 »
По поводу задачи поставленной SIMFF
Поскольку не ясно, какие исходные данные в виде текста должны дробиться двоеточиями на части, предлагаю просто примеры работы функции STRSUB.

Пример 1.
Самое простое. Вводим текст в текстовый параметр, и все символы больше пятого знака автоматически удаляются.
Текстовый параметр назовем _A.
Скрипт:
PARAMETERS _A = STRSUB (_A, 0, 5)Пример 2. 
Надо чтобы текст в параметре разделялся двоеточиями по этому шаблону: ХХХХХ:ХХХ:ХХХХ
Такую задачу, по-моему, невозможно выполнить не создав еще один параметр, в который нужно вводить исходный текст. А преобразованный по шаблону текст можно получить в другом параметре.  
Первый параметр, куда вводим текст, назовем _A.
А второй параметр, где получаем преобразованный текст, назовем _B.
Скрипт:
text1 = STRSUB (_A, 0, 5)
text2 = STRSUB (_A, 6, 3)
text3 = STRSUB (_A, 9, 4)
PARAMETERS _B = text1 + ":" + text2 + ":" + text3
Пример 3. 
Как и в примере 2 надо получить текст разделенный по шаблону двоеточиями.
Но здесь используем три дополнительных параметра, в которых содержатся некие длинные тексты, у которых будем обрубать лишнее и составлять из обрубков новый текст. 
Три параметра назовем _A1_A2_A3. Параметр, где будет регенерироваться текст по шаблону, назовем _B
Скрипт:
PARAMETERS _B = STRSUB (_A1, 0, 5) + ":" + STRSUB (_A, 0, 3) + ":" + STRSUB (_A3, 0, 4)Во втором и третьем примере параметры с исходными текстами можно брать из других файлов.

*

Оффлайн Valery W

  • *****
  • 5987
  • Репутация: +634/-14
  • Пол: Мужской
Re: Строковые функции
« Ответ #9 : Марта 31, 2013, 16:19:00 »
К вопросу по установке формата единиц измерения.
Многие создатели объектов устанавливают так, как у них принято, а потом распространяют объект, не думая, что другие пользователи могут использовать другие единицы измерения. В идеале, желательно отражать тот формат, который установлен в рабочей среде. Делается запрос, получается информация о том, какие единицы используются в данный момент, эта информация используется в функции преобразования  числового выражения в символьную строку.

Применительно к скрипту, показанному Taней_85, это будет выглядеть так:
rr = REQUEST ("Elevation_dimension", "", format_string) ! запрос формата единиц измерения высоты

if bShowBottomHeight then
heightOfBottom = str(format_string, GLOB_ELEVATION)
contString[3] = bottomHeightNotation + " " + heightOfBottom
endif
После этого можно в рабочей среде переключать установки размеров на разные стандарты и в объекте будет отображаться значение согласно выбранному стандарту.

Все виды запросов к рабочей среде проекта можно посмотреть в Справочном руководстве GDL в главе REQUEST.

*

Оффлайн SIMFF

  • *****
  • 2299
  • Репутация: +194/-4
  • Пол: Мужской
Re: Строковые функции
« Ответ #10 : Апреля 03, 2013, 12:23:49 »
А можно ли, как то "загнать" значение GLOB_ID в строку параметра ?
Я пытался так сделать: Parameters txt_id = GLOB_ID. Не получилось...

*

Оффлайн Valery W

  • *****
  • 5987
  • Репутация: +634/-14
  • Пол: Мужской
Re: Строковые функции
« Ответ #11 : Апреля 03, 2013, 13:04:38 »
Что значит "не получилось"? Я бы спросил, что из этого получилось?
Вы вне GDL- редактора результат проверяли? В GDL- редакторе ведь у объекта нет GLOB_ID, там он ему не назначается.

*

Оффлайн lsr

  • *****
  • 1268
  • Репутация: +247/-6
  • Пол: Мужской
  • http://sl-gdl.com
Re: Строковые функции
« Ответ #12 : Апреля 03, 2013, 15:27:45 »
TO SIMFF: Присвойте значение в мастер_скрипте GLOB_ID= "123+", или любой необходимый вам текст. Теперь можно проверять как это все выглядит не выходя из редактора GDL.
Это же можно сделать при редактировании напр. выноски и прочих аналогичных элементов не имеющих значений пока не выйдешь из редактора.
К примеру тип LABEL_CUSTUM_ARROW=1  или перья LABEL_TEXT_PEN=10, и тогда при поверке скрипта Архикад не будет вас костерить, что указанный номер пера меньше единицы. Потом только не забудьте это все удалить либо закомментировать.

*

Оффлайн SIMFF

  • *****
  • 2299
  • Репутация: +194/-4
  • Пол: Мужской
Re: Строковые функции
« Ответ #13 : Апреля 03, 2013, 19:28:18 »
Все верно.  С моей стороны вопрос оказался глупейший. И действительно смотрел в редакторе и конечно ни чего не видел, а при реальном применении объекта полученный порядковый ID отражается в переменной.
Вы вне GDL- редактора результат проверяли? В GDL- редакторе ведь у объекта нет GLOB_ID, там он ему не назначается.

*

Оффлайн Tanya85

  • *****
  • 650
  • Репутация: +42/-1
Re: Строковые функции
« Ответ #14 : Июня 26, 2013, 17:05:14 »
Есть такое выражение:
values "Sagset" RANGE[400,)
Оно предполагает, что значение переменной "Sagset" должно быть не меньше 400 .
Подскажите пожалуйста, а как сделать наоборот, чтобы значение было не больше 400.,
Спасибо за помощь

 

Похожие темы

  Тема / Автор