我有一个工作批处理文件,它在一堆图纸上运行脚本。
该脚本应该运行一个lisp函数,但该函数似乎只在main函数运行后运行。
因为我对lisps了解不多,所以我会尝试提供我所拥有的信息。lsp:
<form id="searchform" action="../search4.php" method="post"><input id="Cref" style="height: 20px; width: 140px;" name="Cref" type="text" value="" />
<input id="submit" name="search" type="submit" value="Search" />
</form>
之后是一些其他(不确定)不那么重要的函数,比如ar_dia - 它会打开一个带有按钮的对话框来调用其他函数。 其他一个函数是AR_LIST,它是我需要在脚本中打开批处理文件的每个文件上运行的函数。
ar_list是几个街区,看起来像这样
<?php
$servername = "localhost";
$username='root';
$password = "";
$dbname = "mydb";
$mysqli = new mysqli($servername,$username, Null, $dbname);
// Check connection
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
if(! get_magic_quotes_gpc() ) {
$Cref = addslashes ($_POST['Cref']);
}else {
$Cref = $_POST['Cref'];
}
session_start();
$results="SELECT * FROM mytable WHERE CRF LIKE CONCAT ('%', $Cref, '%')";
$resultSet = $mysqli->query($results);
$numRows = $resultSet->num_rows;
if ($numRows > 0) {
while ($row = $resultSet->fetch_object()) {
echo "{$row->CRF} {$row->Name} {$row->Description} <br>";
}}
else
{
echo "No Results";}
?>
脚本只需要运行此命令,关闭图形,不要保存。
所以我试过(test.scr)
(princ "\nLoading AREAS...")
(defun c:areas(); Start the program.
(setvar "cmdecho" 0)
(if (= (getvar "tilemode") 1)
(progn
(command "_.ucs" "_world")
(setq osnp (getvar "osmode"))
(setq laag (getvar "clayer"))
(setvar "osmode" 0)
(setq dimz (getvar "dimzin"))
(setvar "dimzin" 0)
(ge_dellay ladeptmp)
(if (>= (substr (getvar "acadver") 1 2) "15")
(ge_convert)
)
(setq allsel (list (cons 0 "POLYLINE")'(-4 . "<OR")(cons 8 ladeppoly)(cons 8 ladeptraf)'(-4 . "OR>")'(-3 ("COSBI"))))
(setq depsel (list (cons 0 "POLYLINE")(cons 8 ladeppoly)'(-3 ("COSBI"))))
(setq areasel (list (cons 0 "POLYLINE")(cons 8 ladeptraf)'(-3 ("COSBI"))))
(setq textsel (list (cons 0 "TEXT")(cons 8 ladeptext)'(-3 ("COSBI"))))
(setq dcl_area (load_dialog "areas"))
(setq dcl_gen (load_dialog "general"))
(setq intp nil dparea nil seltot nil)
(ar_setdep)
(ar_dia)
(if (= what_next 1)(ar_setlay))
(if (= what_next 2)(ar_check))
(if (= what_next 3)(ar_startcheck))
(unload_dialog dcl_area)
(unload_dialog dcl_gen)
(setvar "osmode" osnp)
(setvar "clayer" laag)
(setvar "dimzin" dimz)
(ge_dellay ladeptmp)
)
(alert "Only allowed in original drawing...")
)
(princ)
)
但这给了我错误:
命令:(ar_list) 坏参数类型:stringp nil
我认为ar_list需要来自 (defun ar_list(); Make department/areas list.
(setq sel (ssget "x" allsel))
(if sel
(progn
(setq temp (findfile "template.sqm"))
(if temp
(progn
(command "_.zoom" "_all")
(setq rowlist nil deplist nil)
(setq bestand (open temp "r"))
(setq row (read-line bestand))
(while row
(setq row (read-line bestand))
(if row
(progn
(setq rowlist (cons (strcase (strcat (spatie (substr row 23 14)) "_-")) rowlist))
(setq deplist (cons (strcase (spatie (substr row 23 14))) deplist))
)
)
)
(setq country (ge_dir 3 "Country"))
(ge_dwg)
(if (= (strlen dwgnaam) 9); 3to4storenr
(progn
(setq store (substr dwgnaam (- (strlen dwgnaam) 3))); 3to4storenr
(setq floor (substr dwgnaam (- (strlen dwgnaam) 5) 2)); 3to4storenr
(setq num 0)
(repeat (sslength sel)
(setq depname (cdr (cadadr (assoc -3 (entget (ssname sel num)'("COSBI"))))))
(if (not (wcmatch depname "*`island*"))
(progn
(setq ename (ssname sel num))
(command "_.area" "_a" "_o" ename "")
(ge_puntlist ename)
(setq numpol 0)
(setq selpol (ssget "_wp" puntlist allsel))
(if selpol
(repeat (sslength selpol)
(setq islname (cdr (cadadr (assoc -3 (entget (ssname selpol numpol)'("COSBI"))))))
(if (= islname (strcat depname "-island"))
(command "_s" "_o" (ssname selpol numpol) "")
)
(setq numpol (1+ numpol))
)
)
(command "")
(setq deparea (/ (getvar "area") 1000000))
(if (not (member (strcase depname) deplist))
(progn
(setq deplist (cons (strcase depname) deplist))
(setq rowlist (cons (strcase (strcat depname "_-")) rowlist))
)
)
(setq nummem (- (length deplist)(length (member (strcase depname) deplist))))
(setq deptot (nth nummem rowlist))
(vindpos "_" deptot)
(setq depareaold (substr deptot (+ pos 1)))
(if (/= depareaold "-")
(setq deparea (+ (atof depareaold) deparea))
)
(setq rowlist (subst (strcase (strcat depname "_" (rtos deparea 2 1))) (nth nummem rowlist) rowlist))
)
)
(setq num (1+ num))
)
(command "_.zoom" "_previous")
(setq rowlist (acad_strlsort rowlist)); 13-10-2014
(setq deplist (acad_strlsort deplist)); 13-10-2014
;(setq rowlist (reverse rowlist))
;(setq deplist (reverse deplist))
(ar_write)
)
(alert (strcat "Drawing name " dwgnaam " not correct, must be 9 characters.")); 3to4storenr
)
)
(alert "File TEMPLATE.SQM not found...")
)
)
(alert "No department or traffic found...")
)
)
的内容,但我不知道是什么。 ar_list在命令栏中输入区域后工作。
所以我也试过了
区域 (ar_list) 放弃 Ñ
,但是打开了区域对话框,没有关闭它,阻塞了循环。 此外,当我取消对话框时,ar_list工作,但它再次打开区域对话框。我认为代码会在脚本中重复出现。
非常欢迎任何帮助。我收到了here
的相关帮助答案 0 :(得分:0)
stringp nil告诉我们一些应该是文本字符串的变量实际上是nil。可能是因为它从对话框控件中读取值(在对话框未激活时这是不可用的)。
可能会导致此类问题的地方很少:
我们不知道ge_dir
ge_dwg
ge_puntlist
vindpos
ar_write
ar_write
也许想写一些对话框?
变量dwgnaam
用作字符串但从未在此函数中初始化(可能在其他地方?)
(setq depname (cdr (cadadr (assoc -3 (entget (ssname sel num)'("COSBI")))))) (if (not (wcmatch depname "*island*"))
如果选择的实体不包含XData“cosbi”,则可能会出现问题,但如果我没错,则会出现其他错误消息。