在变量B中搜索字符串
伙计们,再次需要你们的帮助。我需要在一个变量上搜索2个字符串。如果找到这两个字符串,程序将返回True。代码如下:
如果未找到“jose”,则返回false,不需要查找第二个字符串
如果找到“jose”,则搜索下一个字符串
第二个字符串可以是列表中的任意一个(“Michael”“Domino”“Carlos”“Smith”等)
如果不在列表中,则返回false。
我通过使用(2)if(vl string search)函数来实现我的目标,然后复制代码并粘贴4次,然后通过更改需要搜索的第二个字符串来搜索第二个字符串。很有趣,很长的例行程序,但它的工作。现在,我需要借用你的心思,思考如何使用列表来实现这一点。谢谢
(defun c:test ()
(vl-load-com)
(setq myname "Jose Chan Smith")
(setq mylist ("Michael" "Domino" "Carlos" "Smith"))
(if (vl-string-search "JOSE" (strcase myname))
;;;<-- need your help here
;;;<-- I'm stuck
(princ "Strings found")
(princ "Strings not found")
)
(PRINC)
) 您可以使用member函数检查名称是否在列表中(或使用vl位置获取其索引),但请记住,搜索区分大小写,因此“MICHEAL”将不匹配(“MICHEAL”…)。
至于vl字符串搜索,您已经完成了这部分工作。现在,为了允许不区分大小写,您需要将列表设置为大写/小写。以下是更改此列表的“快速”方法:
然后使用构件或vl位置:
顺便说一句,成员返回一个从找到的项开始的列表-因此在上面它实际上会返回(“DOMINO”“CARLOS”SMITH”)。因此,一般来说,它的效率低于vl位置(它只返回找到的位置的整数-在上面它会返回1)。如果没有找到,两者都返回零。 谢谢大家。我就快到了。对不起,我的英语和解释很差。既然我在做一个列表,我不妨把何塞添加到列表中。我的朋友以前没有想过。事情是这样的。。我需要这两个字符串在列表中。
第一个要找到的字符串是Jose。如果Jose不在名单上,请干净利落地退出。无需搜索第二个字符串
如果找到Jose,请查找列表中的第二个字符串。
如果还找到第二个字符串。找到两个字符串,因此“运行我的代码”
让我烦恼的是何塞总是被给予,而第二根弦却没有。所以我必须猜测列表中的另一个字符串是基于什么的。
很抱歉,这只是我在阅读“IF,AND,OR,COND”函数时遇到的一个问题/解决方案。
Lee和irneb帮助我解决了第二个字符串搜索,使其变得简单。这样就可以了,所以我不必粘贴我的cose 4次,但我需要一个更好的解决方案。
也许更好的解释是我的长代码
3 不能直接在myList变量上使用vl字符串搜索。原因是它包含一个列表而不是一个字符串。所以你需要做一些类似李或我的代码。无论如何,这是我的:
编辑:只是对李的一个查询。为什么使用vl-some,然后使用vl-string搜索?你可以用一个简单的eq来做vl,或者我认为vl位置(正如我得到的)在这种情况下会更有效。但不确定。 如果你不想让它在第一个名字找不到的情况下问第二个名字:
注意,我已经将if条件分解为每个可能的场景。您可能不需要这样做,因为您可以使用和轻松地将它们结合起来。 我的坏李的代码工作得很好。我不知道我第一次尝试时做了什么。再次感谢各位,我再次了解了你们。
如果我理解正确,OP不是在寻找字符串相等,而是检查“Jose”是否存在于给定字符串中,以及给定列表中的任何一个名称是否也存在于给定字符串中。这是我从OP在第一篇文章中发布的代码中的示例字符串中了解到的,我认为它比描述稍微清晰。 是的,李,你中了头奖。对不起,我的英语很差,lisp编程也很差。我只是好奇你们会怎么做,以一种简单的方式,这样我可以从中学习。大家都知道,对于我们这些新手来说,简单的方式是很长的路要走。我们必须写5行代码,你可以用一到两行来完成。
我将使用的不是常规方法,而是如何编写有效的lisp例程的方法。谢谢 非常欢迎LISP2LEARN,很高兴为您介绍一些信息 对不起,李,我觉得我们误会了。我的观点是,在myList变量中,名称是单独的文本片段——那么,当普通eq会做完全相同的事情时,为什么要对它们使用vl字符串搜索呢?因此,以下各项是等效的:
编辑:抓取。。。我才意识到你在说什么!
页:
[1]
2