嗨,阿泰克!
当我需要这样的东西时,这条线并没有被忽视,无论如何我也没有。我兼职研究这个课题,下面是我对你要求的看法。由于我不知道您对Autolisp的了解程度,我将提供许多详细信息。
如果问题非常清楚完整,你总是有更好的机会得到答案。许多人不会费心问问题,如果他们提供的答案可能不适合你的需要,许多人也不会浪费宝贵的时间。格式总是一样的吗?x#-x#到x(#+1)-x(#+1)?信息在哪里?在文本上?多行文字?属性你想对答案做什么?将其放入现有块的属性中?在块插入的新实例上?进入创建的多行文字?对要处理的起始表达式的格式进行简单的更改会将问题的复杂性增加10倍,但不用担心,这正是我所需要的。
如果格式始终相同,x#-x#,则可以使用substr和常量数字(substr表达式1 1)检索字母,(substr表达式2 1)检索数字。由于数字是字符串格式,您需要将其转换为整数(atoi),递增,然后将其转换回字符串格式(itoa),将其与字母串联(strcat),如下所示
(strcat(substr表达式1 1)(itoa(+1(atoi(substr表达式2 1))))(substr表达式3 2)(itoa(+1(atoi(substr表达式5 1)ЮЮ)))
但是,如果开始表达式的格式发生更改,它将失败。
如果起始表达式不同,则必须考虑
绳子的长度不同(很明显,对吗?)(cda1-x9)
可能有1个或多个数字要递增(d97as)(F1G5-CS2)
要递增的数字可以是1个或多个数字。(c12-c17)
它可以以数字、数字或文本字符/字符串开始/结束。好吃!
剩下的唯一选择是逐字符检查。对于每个角色,您必须执行以下操作:
如果您不知道每次将检查多少个字符,以及一个数字中可能有多少位,则检查函数必须在需要时(且仅在需要时)回调。也许你认识到了这个模式,如果你不认识,那就是我们所说的递归函数。今天是你的幸运日,因为我几天前刚刚学习了一种递归(lambda嵌入lambda,niffffffty!),并想应用这个概念。也许其他方法会更容易(也许不会),也许我正在用火箭筒杀死一只苍蝇,但是嘿!用火箭筒杀死苍蝇真是太酷了!)
同时
每次你偶然发现一个数字序列的完成,你必须直接存储它,或者它在起始表达式中的位置/长度。我选择了后者,因为如果你知道字符串中的所有数字位置及其长度,你可以通过演绎找到并检索文本部分。。由于信息量未知,存储它的最佳方式是(鼓轮)列表!既然我们在列表处理中这么做,那该有多方便=)
下一步。
创建新表达式,检索后面的文本部分和数字(递增)。
我唯一没有考虑的事情是:
数字开头的零。(C05将返回C6)。想起来容易
文本格式
我不可能去那里
它也不适用于多重引线,维度,并且可以使多行文字中的维度看起来很奇怪。14/17“别让我觉得很自然。哦,别在你的狗身上试,以防万一=)
附言:我留下了许多提醒/原则,并对它们进行了评论。压制“;”在前面,试着跟随潮流。我留下了建筑清单。至于返回列表的工作方式,“c12-c217”将构建该列表;((2 . 1) (2 . 2) (6 . 3))
第一个点对是((找到的数的nb。需要常数)
下面的每个点对都是(数字第一位的位置。数字的长度)
似乎效果不错,我已经用这些例子进行了测试和调试,可以在包含555、5、c、c42-、c99-8、d17bd、c17bd43之类内容的文本/多行文字上试用。c2-c5、99B99999、a4v6s9f6s0v99。。。请保留标题=)
特别感谢cwake。克林特?克林特?克莱特=D
祝你周末愉快!
杰夫! |