我的用例是将列表列表作为表打印,列长度相等,所以我想截断长输入。是否有指令要这样做?也许是一个带有~[
条件的单线程?
~a
的论点允许填空:
(format t "~10a***" "aaa")
aaa ***
;; aaa ***
完整打印长输入:
(format t "~10a***" "aaaaaaaaaaaaaaaaa")
;; aaaaaaaaaaaaaaaaa***
所以我在str:substring
的帮助下这样做,其中start和end可以比列表大,而不会抛出错误(与subseq相反):
(ql:quickload "str")
(defvar mylist '(("header a" "header b")
("col a" "col b")
("much longer col a" "much longer col b")))
(mapcar (lambda (it)
(format t "~10a | ~10a ~&" (str:substring 0 10 (first it))
(str:substring 0 10 (second it))))
mylist)
header a | header b
col a | col b
much longe | much longe
我不希望格式能够在截断的字符串中添加省略号(...
),但这样会很好。
我在快速参考或here中找不到我要找的内容。
谢谢!
答案 0 :(得分:3)
不是我知道,但您可以自己编写并使用Tilde Slash。
答案 1 :(得分:0)
现在还有str:prune length string
,它接受一个:ellipsis
参数来告诉您如何切割字符串:
(mapcar (lambda (tuple)
(format t "~10a | ~10a~&"
(str:prune 10 (first tuple) :ellipsis "…")
(str:prune 10 (second tuple) :ellipsis "…")))
mylist)
header a | header b
col a | col b
much long… | much long…
我们可以使用v
指令不重复那么多列长度:
(defparameter *col-length* 10)
(mapcar (lambda (tuple)
(format t "~va | ~va~&"
*COL-LENGTH*
(str:prune *COL-LENGTH* (first tuple) :ellipsis "…")
*COL-LENGTH*
(str:prune *COL-LENGTH* (second tuple) :ellipsis "…")))
mylist)
header a | header b
col a | col b
much long… | much long…
我们可以使用(let ((str:*ellipsis* "…") …)
。