aws 发表于 2024-8-10 21:37:29

请教一下表的转换操作


[*](setq lst '("12*2" "2*10" "10*11" "5.5*5"))
[*]
[*](setq newlst '(12 12 2 2 2 2 2 2 2 2 2 2 10 10 10 10 10 10 10 10 10 10 10 5.5 5.5 5.5 5.5 5.5))



请教一下,这样该怎么实现?
如上述这样转换,注意的是,上面是字符串,下面是实数或者整数
尽量用简洁的代码。

lijiao 发表于 2024-8-11 09:27:04

(setq lst '("12*2" "2*10" "10*11" "5.5*5"))
(apply 'append
       (mapcar '(lambda        (x)
                  (setq        x      (read (vl-string-subst " " "*" (strcat "(" x ")")))
                        sublst nil
                  )
                  (repeat (cadr x)
                  (setq sublst (cons (car x) sublst))
                  )
                )
             lst
       )
)

muai2010 发表于 2024-8-10 21:55:31

同不会哈哈,没研究这么深,只会改c:后面的快捷键

aws 发表于 2024-8-10 22:55:33

(defun c:tt ()
(setq lst '("12*2" "2*10" "10*11" "5.5*5"))
(setq lst(mapcar '(lambda(x)
                      (list
                        (substr x 1(vl-string-search "*" x))
                        (substr x(+ 2(vl-string-search "*" x)))      
                      )
                  )
             lst)
)
(setq newlst nil)
(foreach x lst
    (repeat(atoi(cadr x))
      (setq newlst(cons(atof(car x))newlst))
    )
)
(setq newlst(reverse newlst))
(print newlst)
(princ)
)



好吧,稍微研究了一下,写成这样,倒也达到效果了。还有更简洁的吗

你有种再说一遍 发表于 2024-8-10 21:50:28

你5000积分了没学会切割字符串?

aws 发表于 2024-8-10 22:14:34

你有种再说一遍 发表于 2024-8-10 21:50
你5000积分了没学会切割字符串?

确实对字符串相关处理,研究不多

lee50310 发表于 2024-8-11 02:51:43

本帖最后由 lee50310 于 2024-8-11 10:57 编辑

指令:tt2
回應: (12 12 2 2 2 2 2 2 2 2 2 2 10 10 10 10 10 10 10 10 10 10 10 5.5 5.5 5.5 5.5 5.5)






xxyyzzlg 发表于 2024-8-11 10:02:01

感谢热心解答,学到了

THZL 发表于 2024-8-11 17:05:53

(defun c:tt ()
;; 定义乘法表达式的列表
(setq lst '("12*2" "2*10" "10*11" "5.5*5"))

;; 初始化一个空列表用于存储结果
(setq newlst nil)

;; 处理每个乘法表达式
(foreach expr lst
    ;; 获取乘法符号的位置
    (setq pos (vl-string-search "*" expr))
    ;; 提取两个数字
    (setq num1 (atof (substr expr 1 pos)))
    (setq num2 (atoi (substr expr (+ pos 2))))
    ;; 根据第二个数字重复第一个数字
    (repeat num2
      (setq newlst (append newlst (list num1)))
    )
)

;; 打印结果
(print newlst)

;; 退出函数
(princ)
)

THZL 发表于 2024-8-11 17:06:56

不知道能不能帮上老哥忙{:1_1:}
页: [1] 2
查看完整版本: 请教一下表的转换操作