明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1343|回复: 12

[提问] 请教一下表的转换操作

[复制链接]
发表于 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))



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

评分

参与人数 1明经币 +1 收起 理由
cchessbd + 1 神马都是浮云,悬赏吧,大家都有动力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-8-11 09:27:04 | 显示全部楼层
  1. (setq lst '("12*2" "2*10" "10*11" "5.5*5"))
  2. (apply 'append
  3.        (mapcar '(lambda        (x)
  4.                   (setq        x      (read (vl-string-subst " " "*" (strcat "(" x ")")))
  5.                         sublst nil
  6.                   )
  7.                   (repeat (cadr x)
  8.                     (setq sublst (cons (car x) sublst))
  9.                   )
  10.                 )
  11.                lst
  12.        )
  13. )

评分

参与人数 3明经币 +3 收起 理由
yanshengjiang + 1 很给力!
hubeiwdlue + 1 赞一个!
lee50310 + 1 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2024-8-10 21:55:31 | 显示全部楼层
同不会哈哈,没研究这么深,只会改c:后面的快捷键
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-8-10 22:55:33 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setq lst '("12*2" "2*10" "10*11" "5.5*5"))
  3.   (setq lst(mapcar '(lambda(x)
  4.                       (list
  5.                         (substr x 1(vl-string-search "*" x))
  6.                         (substr x(+ 2(vl-string-search "*" x)))        
  7.                       )
  8.                     )
  9.              lst)
  10.   )
  11.   (setq newlst nil)
  12.   (foreach x lst
  13.     (repeat(atoi(cadr x))
  14.       (setq newlst(cons(atof(car x))newlst))
  15.     )
  16.   )
  17. (setq newlst(reverse newlst))
  18.   (print newlst)
  19.   (princ)
  20. )




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

回复 支持 1 反对 0

使用道具 举报

发表于 2024-8-10 21:50:28 | 显示全部楼层
你5000积分了没学会切割字符串?

点评

最近很想开开玩笑^_^  发表于 2024-8-10 22:38
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-8-10 22:14:34 | 显示全部楼层
你有种再说一遍 发表于 2024-8-10 21:50
你5000积分了没学会切割字符串?

确实对字符串相关处理,研究不多
发表于 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)






发表于 2024-8-11 10:02:01 | 显示全部楼层
感谢热心解答,学到了
发表于 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)
)
发表于 2024-8-11 17:06:56 | 显示全部楼层
不知道能不能帮上老哥忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-21 03:18 , Processed in 0.188788 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表