|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
LISP: функция strcat игнорирует управляющие символы?
Регистрация: 30.03.2012
Сообщений: 101
|
||
Просмотров: 4880
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Выполни в ком.строке
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Так и должно быть, ничего не "игнорит", вполне нормальное поведение. А что ожидалось?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
WhiteShark, почитай про управляющие символы и работу слеша. Тебя вообще не смущает, что перевод строки - это \n, символ табуляции - \t, слеш - \\ и т.д.?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Не надо путать внутреннее представление строки и ее вид при выводе на экран.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
Do$ ну почему моя строка не может быть такой как я хочу и представлять из себя просто кавычку, а не кавычку со слэшем? Так же не должно быть.
Между прочим, вариант от nolte, даёт желаемый результат! Вообще задача состоит в том, чтобы команде vl-cmdf передать набор параметров, имеющихся ввиду списка. Для этого надо перевести весь этот список в строку. Например: (vl-cmdf "-insert" "blockname" "basePt" "Xscale" "Yscale" "Zscale" "Angle" ???что то вокруг списка значений тэгов вида ("TagVal1" "TagVal2")??) нужно перевести в (vl-cmdf "-insert" "blockname" "basePt" "Xscale" "Yscale" "Zscale" "Angle" "TagVal1" "TagVal2") Вот вместо ???что то вокруг .... ??? вроде подходит (apply 'strcat ("TagVal1" "TagVal2")), но кавычки при этом съедаются. Конструкция (strcat (chr 34) "TagVal1" (chr 34) " " (chr 34) "TagVal2" (chr 34)) возвращает желаемую последовательность "TagVal1" "TagVal2" но vl-cmdf всё равно её не кушает ![]() Понятно, что можно более программно менять значения атрибутов в блоках, но цель была сделать это во время вставки, а не после. Если, кто-то что-то подскажет, буду рад |
|||
![]() |
|
||||
Цитата:
Код:
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
Do$, это во VLIDE так выглядит. А если вы присвоите это значение какой нить переменной и потом её inspect, то увидите, что там будет
#\" #\t #\e #\x #\t #\" То есть тут каждый символ предваряется слэшем. То есть, считай его нет и перед кавычкой. В общем, как бы это ни казалось визуально тем же, но vl-cmdf такой вариант съедает. Единстенная проблема - не понимает пробел как enter ( |
|||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
Do$, Это понятно, что пустую строку как enter. Я имею ввиду не воспринимает пробел между аргументамии. То есть
хотя вроде и получается после обработки (vl-cmdf "-insert" "blockname" "basePt" "Xscale" "Yscale" "Zscale" "Angle" "TagVal1" "TagVal2") но по факту передается не пара значений тэгов в конце, а совокупность ' "TagVal1" "TagVal2" ' воспринимается как значение первого тэга, а для значения второго тэга команда ожидает очередного ввода. Задачу в общем виде можно описать так: как сделать (vl-cmdf "_.line" "0,0,0" "1,1,1" "") из vl-cmdf и ("_.line" "0,0,0" "1,1,1" "")? То есть отбросить скобки вокруг списка параметров (преобразовать список в строку)? |
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Какая мутность и примитивность задачи в теме Лисп...
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
Do$, большое спасибо! Направили, куда нужно )
![]() В итоге конструкция (apply 'vl-cmdf (append (list "-insert" "blockname" "basePt" "Xscale" "Yscale" "Zscale" "Angle") '("Val1" "Val2" .. "Valn")) ) делает то, что нужно Alan может это и мутно, но короче еще одного цикла. А общая задача, которую я решил - восстановление взорванных блоков (без наличия их описаний в словарях). По мне так не самая примитивная задача. По крайней мере я еще не видел нигде её решения. Последний раз редактировалось WhiteShark, 21.02.2014 в 15:45. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Вообще-то вставку блока можно делать и не командными методами. ИМХО нередко получается надежнее и проще.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
Цитата:
vla-insertblock такого не позволяет. А делать блок через entmake намного более громоздко этой строчки, потому что заранее неизвестен набор примитивов, составляющих блок. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ага, получается, что проще сначала системные переменные ATTREQ (и, возможно, ATTDIA) поставить в 0, потом назначать значения атрибутам, потом возвращать все обратно? Не, я на такое не согласный - мне проще получить указатель на вставленный программно блок, из этого указателя вычислить все атрибуты и по тэгам уже назначать строковые значения. Быстро, просто, надежно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
Во-первых я не трогаю эти переменные (и без них всё как надо)
Во-вторых я уже было дописал ваш второй предлагаемый вариант, как ответил Do$ и вариант в одну строчку мне показался покомпактней чем такой ) Плюс, вы не считаете, что идеологически правильно вставить блок с уже правильными значениями атрибутов, чем вставить с неправильными и потом вторым действием их исправлять? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Не-а, не считаю: последовательность задания атрибутов может быть изменена. Пользователем или нет, это уже неважно. А программа должна работать предсказуемо.
P.S. "Вы" - это кому? Меня один.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Цитата:
Для меня проще вставить блок " с неправильными" атрибутами при (setvar "attreq" 0) "и потом вторым действием их исправлять". Указателем на это примитив будет (setq rr3 (entlast)) а потом корректировка не раз публиковавшейся мной здесь функцией.
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
В моём случае последовательность не может быть изменена. Вернее, правильность передачи значений атрибутов именно нужным тегам отслеживается и так по сценарию.
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программная настройка AutoCAD, как это делается? | Krieger | Программирование | 163 | 13.07.2015 19:04 |
AUTOCAD 2010 перестал переключаться в многооконный режим. Проблемы с переменными | Андрей Х. | AutoCAD | 24 | 27.05.2015 10:17 |
Расчет геметрических характеристик сечений, черчение елипс инерции - не работает лисп | Student | LISP | 14 | 17.02.2014 10:27 |
Acaddoc.lsp вирус или нет? | Mikhail.Pavliy | AutoCAD | 119 | 04.07.2013 22:16 |
Lisp. Не вставляет значения в базу access. | Zaghim | LISP | 2 | 11.07.2012 14:29 |