等式,=,等于但不等于case sens
嘿伙计们,我有一个例行程序,比较和更新标题栏中的修订值,并发现需要考虑一些值是否相等。。。但忽略了人物的情况。
例如,我希望例程将“A”和“A”视为相等。
我在堆栈溢出处发现了此线程:http://stackoverflow.com/questions/547436/whats-the-difference-between-eq-eql-equal-and-equalp-in-common-lisp
... 这表明使用了“equalp”。但“equalp”似乎不是AutoLISP函数。
AutoCAD中是否有“equalp”的替代品?
非常感谢您的帮助。 您可以在比较时将字符串强制为大写。
(setq s1 "lamensterms"s2 "Lamensterms") (eq (strcase s1)(strcase s2))
这足以满足你的需要吗? 你好,pBe,
非常感谢您的回复。我不确定你提供的代码是否可以应用到例程中(至少,可能不是我目前构建代码的方式)。
我当前的(部分)代码是:
((= crev "A")
(SETQ nrev "B"))
((= crev "B")
(SETQ nrev "C"))
((= crev "C")
(SETQ nrev "D"))
其中,“crev”是当前版本,从版本块内的属性中提取,“nrev”是要设置的新版本。
任何小写修订字母都是打字错误,我真的不需要更正现有修订的大小写。。。但我希望例程能够在任何情况下读取值——如果这有意义的话。
所以如果crev=A,nrev=B,如果crev=A,nrev=B,依此类推。。
我可以简单地将以下几行添加到我的例程中:
((= crev "a")
(SETQ nrev "B"))
((= crev "b")
(SETQ nrev "C"))
((= crev "c")
(SETQ nrev "D"))
但我只是好奇是否有另一种方法,用一个不那么严格的“=”函数。 我懂了,
(if (setq a (assoc (strcase crev) '(("A" "B") ("B" "C") ("C" "D")("D" "E"))))
(setq nrev (cadr a))
)
现在,如果列表中没有定义值或CREV呢?例如“E”,就像你说的,拼写错误像“A”
甚至更好
(chr (1+ (Ascii (strcase crev )))) 至于字符串比较:这里有一个快速而肮脏的代码[为了好玩]
(defun _equalstr (s1 s2)
(wcmatch s1
(apply 'strcat
(mapcar '(lambda (x)
(if (<= 65 x 90)
(strcat "[" (chr x) (chr (+ 32 x)) "]")
(chr x)
)
)
(vl-string->list (strcase s2))
)
)
)
)
(_equalstr“CADTutor here”“CADTutor here”)
(_equalstr“敏捷的棕色狐狸跳过懒狗”,“敏捷的棕色狐狸跳过懒狗”)
当然,只要使用strcase函数,它的加载就更容易了 Lamenterms,为了确保您的代码摘录在任何情况下都有效,您还可以确保crev变量在进行比较之前是大写的:
(setq crev (strcat crev))
...
((= crev "A")
(SETQ nrev "B"))
((= crev "B")
(SETQ nrev "C"))
((= crev "C")
(SETQ nrev "D")) 啊,太棒了,谢谢你的指点。我非常喜欢使用“chr”和“ascii”函数的想法。
我确实打算发布整个代码,以获得一般反馈和更正。我想,一旦我从你们那里得到了一些意见,我会做出很多调整——哈哈。
同时,我将发布更多的问题来帮助我进一步开发代码(尽管我认为最好是开始新的线程)。
再次感谢pBe。 您好Mircea,谢谢您的回复和建议-我认为这是一个很好的选择。
再次感谢。
页:
[1]