getstring问题
我目前正在编写一个lisp,它使用(getstring)从大约48个值中进行选择。我知道很多。然而,我已经设置了lisp以利用动态输入菜单,这样您就可以点击而不是键入长字符串。我的问题是,它只是抓住了绳子的第一部分。第一个空格之后的任何内容都将被忽略。如果我手动键入其中一个选项,lisp将继续,就像什么都没发生一样。最初我使用的是getkword,但也是同一个问题。我已经附上了现在编写的代码,并感谢任何帮助。我正想弄清楚这件事。
编辑:抱歉格式化。如果你想像我写的那样查看,我使用记事本++和2的标签缩进和ZenBurn主题。
命令CopyPlotConfigs。lsp 您可以用T填充getstring的可选参数,它将接受带空格的字符串(getstring T“\n say it:”)。然而,在你的情况下,我要么使用DCL列表框,要么使用getkword。
我确实使用了getstring T,所以我可以手动输入页面设置,效果很好。实际上,通过DYN输入点击它并没有。
在这种情况下,我将如何使用getkword?我还没有完全弄清楚它的细微差别(我刚刚开始回顾我所有的代码来使用getkword,所以它对我来说相对较新)。我试着做了A)页面设置1,B)页面设置2,等等。第一种是A,第二种是B,等等。但这似乎也不起作用。我试图避免使用DCL来安抚公司里的键盘骑师(像我一样),并计划创建一个功能区选项卡,利用lisp进行点击类型。 (defun c:test (/)
(initget 0 "Yes No")
(getkword "\nDo you understand now? : ")
)
我用initget和getkword尝试了以下方法:
(setq V:Plot01 "Page Setup 01")
(setq V:Plot02 "Page Setup 02")
(setq V:Plot03 "Page Setup 03")
(setq V:PlotList (strcat "[" V:Plot01 "/" V:Plot02 "/" V:Plot03 "]"))
(initget 0 V:PlotList)
(if (= nil V:Plot)
(setq V:Plot (getkword (strcat "\nEnter page setup: " V:PlotList)))
(setq V:Plot (getkword (strcat "\nEnter page setup: " VPlotList "<" V:Plot "> ")))
)
(if (= V:Plot V:Plot01)
(progn
// (command "._-PSetupIN" "D:/AutoCAD/Templates/Page Setups - 64bit.dwt" "*")
// (command "-Plot" "No" "" V:Plot01 "" "No" "Yes" "No")
(PurgeUnused)
(princ (strcat "/n" V:Plot " page setup has been imported and set."))
(princ)
)
)
你的initget是错误的。 为什么呢我的印象是initget 0只允许有人点击enter。还是我必须这样做?
(initget 1“页面设置01页面设置02页面设置03”)
那么,在那个时候,我该如何计算每个选项中的空格呢?
编辑:废话,刚刚看到这个帖子:http://www.cadtutor.net/forum/showthread.php?48047-初始化
所以,我想使用getstring可能是最好的选择,因为我的选项中有空格,这让我回到了我最初的问题。 是的,我真的看了你的“名单”。getkword在这种情况下是行不通的。然而,我的意思是,你不能给initget一个像(initget 0“[是/否]”)这样的字符串,它必须是(initget 0“是/否”)。
你要么要走可怕的getstring路线,要么要使用列表框(我的建议)。 如果你不想做列表框,你可以试试这个。。。
(defun c:TEst (/ lst int choice)
((lambda (i)
(setq lst (mapcar (function (lambda (x) (cons (setq i (1+ i)) x)))
'("PDF - 11 x 17" "PDF - 11 x 17 - ByLayer" "PDF - 17 x 22"
"PDF - 17 x 22 - ByLayer" "PDF - 18 x 24" "PDF - 18 x 24 - ByLayer"
"PDF - 22 x 34" "PDF - 22 x 34 - ByLayer" "PDF - 24 x 36"
"PDF - 24 x 36 - ByLayer" "PDF - 30 x 42" "PDF - 30 x 42 - ByLayer"
"PDF - 34 x 44" "PDF - 34 x 44 - ByLayer" "PDF - 36 x 48"
"PDF - 36 x 48 - ByLayer" "Xerox 6204 - 17 x 22 - STF"
"Xerox 6204 - 17 x 22 - STF - ByLayer" "Xerox 6204 - 18 x 24 - STF"
"Xerox 6204 - 18 x 24 - STF - ByLayer" "Xerox 6204 - 22 x 34"
"Xerox 6204 - 22 x 34 - ByLayer" "Xerox 6204 - 22 x 34 - STF"
"Xerox 6204 - 22 x 34 - STF - ByLayer" "Xerox 6204 - 24 x 36"
"Xerox 6204 - 24 x 36 - ByLayer" "Xerox 6204 - 24 x 36 - STF"
"Xerox 6204 - 24 x 36 - STF - ByLayer" "Xerox 6204 - 30 x 42"
"Xerox 6204 - 30 x 42 - ByLayer" "Xerox 6204 - 30 x 42 to 18 x 24"
"Xerox 6204 - 30 x 42 to 24 x 36" "Xerox 6204 - 34 x 44"
"Xerox 6204 - 34 x 44 - ByLayer" "Xerox 6204 - 36 x 48"
"Xerox 6204 - 36 x 48 - ByLayer" "Sharp Color - 8.5 x 11"
"Sharp Color - 8.5 x 11 - ByLayer" "Sharp Color - 11 x 17"
"Sharp Color - 11 x 17 - ByLayer" "Sharp Color - 11 x 17 - STF"
"Sharp Color - 11 x 17 - STF - ByLayer" "HP LaserJet 8150N - 8.5 x 11"
"HP LaserJet 8150N - 8.5 x 11 - ByLayer" "HP LaserJet 8150N - 11 x 17"
"HP LaserJet 8150N - 11 x 17 - ByLayer" "HP LaserJet 8150N - 11 x 17 - STF"
"HP LaserJet 8150N - 11 x 17 - STF - ByLayer"
)
)
)
)
-1
)
(textscr)
(mapcar (function print) lst)
(if (setq int (getint "\nSpecify number for Page Setup option: "))
(if (setq choice (cdr (assoc int lst)))
(progn
(command
"._-PSetupIN"
"C:/Users/TAbel/AppData/Roaming/PortableApps/Dropbox/Dropbox/AutoCAD/Templates/Page Setups - 64bit.dwt"
"*"
)
(command "-Plot" "No" "" choice "" "No" "Yes" "No")
)
(princ "\nInvalid selection.")
)
)
(princ)
) 完全不切实际(将挤满屏幕)。。。
(defun c:TEst (/ lst choice)
((lambda (i)
(setq lst (mapcar (function (lambda (x) (list (setq i (1+ i)) x)))
'("PDF - 11 x 17" "PDF - 11 x 17 - ByLayer" "PDF - 17 x 22"
"PDF - 17 x 22 - ByLayer" "PDF - 18 x 24" "PDF - 18 x 24 - ByLayer"
"PDF - 22 x 34" "PDF - 22 x 34 - ByLayer" "PDF - 24 x 36"
"PDF - 24 x 36 - ByLayer" "PDF - 30 x 42" "PDF - 30 x 42 - ByLayer"
"PDF - 34 x 44" "PDF - 34 x 44 - ByLayer" "PDF - 36 x 48"
"PDF - 36 x 48 - ByLayer" "Xerox 6204 - 17 x 22 - STF"
"Xerox 6204 - 17 x 22 - STF - ByLayer" "Xerox 6204 - 18 x 24 - STF"
"Xerox 6204 - 18 x 24 - STF - ByLayer" "Xerox 6204 - 22 x 34"
"Xerox 6204 - 22 x 34 - ByLayer" "Xerox 6204 - 22 x 34 - STF"
"Xerox 6204 - 22 x 34 - STF - ByLayer" "Xerox 6204 - 24 x 36"
"Xerox 6204 - 24 x 36 - ByLayer" "Xerox 6204 - 24 x 36 - STF"
"Xerox 6204 - 24 x 36 - STF - ByLayer" "Xerox 6204 - 30 x 42"
"Xerox 6204 - 30 x 42 - ByLayer" "Xerox 6204 - 30 x 42 to 18 x 24"
"Xerox 6204 - 30 x 42 to 24 x 36" "Xerox 6204 - 34 x 44"
"Xerox 6204 - 34 x 44 - ByLayer" "Xerox 6204 - 36 x 48"
"Xerox 6204 - 36 x 48 - ByLayer" "Sharp Color - 8.5 x 11"
"Sharp Color - 8.5 x 11 - ByLayer" "Sharp Color - 11 x 17"
"Sharp Color - 11 x 17 - ByLayer" "Sharp Color - 11 x 17 - STF"
"Sharp Color - 11 x 17 - STF - ByLayer" "HP LaserJet 8150N - 8.5 x 11"
"HP LaserJet 8150N - 8.5 x 11 - ByLayer" "HP LaserJet 8150N - 11 x 17"
"HP LaserJet 8150N - 11 x 17 - ByLayer" "HP LaserJet 8150N - 11 x 17 - STF"
"HP LaserJet 8150N - 11 x 17 - STF - ByLayer"
)
)
)
)
-1
)
(initget
0
(vl-list->string
(cdr (apply (function append)
(mapcar (function (lambda (x) (cons 32 (vl-string->list (itoa (car x)))))) lst)
)
)
)
)
(if (setq choice
(getkword
(strcat
"\nSpecify number for Page Setup option ["
(substr
(apply
'strcat
(mapcar (function (lambda (x) (strcat "/" (itoa (car x)) " = " (cadr x)))) lst)
)
2
)
"]: "
)
)
)
(progn
(command
"._-PSetupIN"
"C:/Users/TAbel/AppData/Roaming/PortableApps/Dropbox/Dropbox/AutoCAD/Templates/Page Setups - 64bit.dwt"
"*"
)
(command "-Plot" "No" "" (cadr (nth (atoi choice) lst)) "" "No" "Yes" "No")
)
)
(princ)
)
页:
[1]
2