gpt4 book ai didi

lisp - 如果找到匹配则返回一行文本

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:00 25 4
gpt4 key购买 nike

如果找到匹配项,我无法弄清楚如何返回一行文本。

(set 'wireshark "http://anonsvn.wireshark.org/wireshark/trunk/manuf")

(set 'arptable (map (fn (x) (parse x " ")) (exec "arp -a")))

(define (cleanIPaddress x)
(slice x 1 -1))

(define (cleanMACaddress x)
(upper-case (join (slice (parse x ":") 0 3) ":")))

(define (addIPandMACaddress x)
(list (cleanIPaddress (nth 1 x)) (cleanMACaddress (nth 3 x))))

(set 'arplist (map addIPandMACaddress arptable))

(set 'routerMAC (last (assoc (exec "ipconfig getoption en1 router") arplist)))

(find-all routerMAC (get-url wireshark))

返回

("20:AA:4B")

所以我知道代码“有效”

但我想检索整行文本

“20:AA:4B Cisco-Li # Cisco-Linksys, LLC”

最佳答案

这可以通过使用 string-split 过程简单地执行,该过程允许我们使用 remove-if(filter 的 Common Lisp 版本>) 搜索由换行符分割的字符串,删除不包含我们正在搜索的字符串的任何行。这将导致包含该字符串的每一行的列表。我们将在此处定义的函数已经可以通过各种 Common Lisp 库获得,但出于教育目的,我们将自己定义它们。您需要的代码如下所示:

; First we need a function to split a string by character

(defun string-split (split-string string)
(loop with l = (length split-string)
for n = 0 then (+ pos l)
for pos = (search split-string string :start2 n)
if pos collect (subseq string n pos)
else collect (subseq string n)
while pos))

; Now we will make a function based on string-split to split by newlines

(defun newline-split (string)
(string-split "
" string))

; Finally, we go through our text searching for lines that match our string.
; Make sure to replace 'needle' with the string you wish to search for.

(remove-if #'(lambda (x)
(equal 'nil (search (string-upcase "needle")
(string-upcase x))))
(newline-split haystack))

您应该能够将此策略应用到您发布的代码中,只需进行一些小的修改。此代码已在 Mac OS X 10.7.5 上的 SBCL 1.0.55.0-abb03f9(ANSI Common Lisp 的实现)上进行了测试。

关于lisp - 如果找到匹配则返回一行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13529709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com