jun470 发表于 2024-3-5 15:34:45

关于变量内换行结果的问题

本帖最后由 jun470 于 2024-3-5 15:37 编辑

      半路出家写的程序,现在遇到了点问题,上来请教一下,搜索过换行相关帖子,为找到想要的结果。发帖来问问大家。

      下面程序是提取到一组数据,目前用最土的办法,提取一个输出一个,加空格和换行。但是像要把整个结果整合起来就不懂问题出在哪里,麻烦高手们帮忙看看,或者有其他方法,不用strcat。



测试程序:
(defun c:Q ( / lst lshh lsSS zhenghe)
(setq lst '(("424" "437" "436" "435") ("429" "425" "426" "434") ("430" "428" "427" "433")
("422" "431" "439" "432")))
(SETQ zhenghe "")
(repeat (length lst) ;循环次数=行数
    (setq lshh (car lst));取第一个
(print);换行
         
   (repeat (length lshh);循环次数=列数
   (setq lsSS (car lshh));取第一个
   (prinC lsSS) (prinC " ");输出屏幕,计划要这样的格式在一个变量中

   (setq zhenghe (strcat zhenghe " " lsSS));合并字符串,加空格分隔
   
   (setq lshh (cdrlshh));去掉第一个
    )
   (setq zhenghe (strcat zhenghe "
"));增加换行(换行符按住Alt 输入10),目前不行

(setq lst(cdrlst));去掉第一个
   )

(print)
(print zhenghe);;输出屏幕,计划要输出像上面的格式,让数据以上面的格式进剪贴板


(princ))代码潦草,阅读感受不好见谅哈!

ssyfeng 发表于 2024-3-5 15:57:13

本帖最后由 ssyfeng 于 2024-3-5 16:09 编辑

换行用\n就可以了

试试这个:
(defun c:q (/ lst)
(setq lst '(
               ("424" "437" "436" "435")
               ("429" "425" "426" "434")
               ("430" "428" "427" "433")
               ("422" "431" "439" "432")
             )
)
(princ "\n")
(mapcar (function (lambda (x)
                      (mapcar (function (lambda (y)
                                          (princ y)
                                          (princ " ")
                                        )
                              )
                        x
                      )
                      (princ "\n")
                  )
          )
    lst
)
(princ)
)

夏生生 发表于 2024-3-5 16:00:23

本帖最后由 夏生生 于 2024-3-5 16:53 编辑

没蛮看懂题意,按理解写了一下
(defun c:tt(/ rr lst str key)
    (defun rr(lst Key / Str)
(setq str (apply 'strcat
       (mapcar '(lambda (x) (strcat x key))
         (reverse (cdr (reverse lst))))))
(strcat str (last lst) "\n"))
    (setq lst '(("424" "437" "436" "435")
    ("429" "425" "426" "434")
    ("430" "428" "427" "433")
    ("422" "431" "439" "432")))
    (princ "\n")
    (foreach n lst (princ (rr n " ")))
    (princ))
无聊,再补充一个格式化的

(defun c:tt(/ a i lst p q x)
    (setq lst '(("4204" "437" "436" "435")
    ("429" "421115" "426" "434")
    ("430" "42008" "427" "433")
    ("422" "431" "43639" "4032"))
    a   (mapcar '(lambda (x) (apply 'max (mapcar 'strlen x)))
          (apply 'mapcar (cons 'list lst))))
    (princ "\n")
    (foreach nlst
(setq i 0)
(foreach mn
      (setq p (strlen m)
      q (nth i a))
      (if(and (= i 0) (= p q))
    (princ m)
    (if (= i 0)
      (progn (repeat (- q p) (princ " ")) (princ m))
      (progn (repeat (1+ (- q p)) (princ " "))
         (princ m))))
      (setq i (1+ i)))
(princ "\n"))
    (princ))

yxp 发表于 2024-3-5 16:05:57

这个叫格式化输出,用 \n 控制回车,\t 控制对齐 就可以。

树櫴希德 发表于 2024-3-5 17:47:01

yxp 发表于 2024-3-5 16:05
这个叫格式化输出,用 \n 控制回车,\t 控制对齐 就可以。

\t 控制对齐什么意思?

jun470 发表于 2024-3-5 22:09:06

ssyfeng 发表于 2024-3-5 15:57
换行用\n就可以了

试试这个:

谢谢指教,\n赋值给变量和打印不一样

jun470 发表于 2024-3-5 22:12:42

树櫴希德 发表于 2024-3-5 17:47
\t 控制对齐什么意思?

\t 约等于是 Tab 键,制表符

jun470 发表于 2024-3-5 22:13:48

yxp 发表于 2024-3-5 16:05
这个叫格式化输出,用 \n 控制回车,\t 控制对齐 就可以。

感谢指教,确实用这样就行了

jun470 发表于 2024-3-5 22:14:55

ssyfeng 发表于 2024-3-5 15:57
换行用\n就可以了

试试这个:

感谢指教,我试出来了

树櫴希德 发表于 2024-3-7 20:10:12

jun470 发表于 2024-3-5 22:12
\t 约等于是 Tab 键,制表符

在输出成文本文件时候怎么用呢?
页: [1] 2
查看完整版本: 关于变量内换行结果的问题