乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 19|回复: 19

[编程交流] 提取要放置的登录名

[复制链接]

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:17:56 | 显示全部楼层 |阅读模式
大家好
 
我是CADTutor的新手,我已经使用AutoCAD 4年了,但在过去的一年里,我发现了关于LISP的知识,对它知之甚少。
 
我正在尝试编写一个例程,找出谁登录到系统(在我的工作地点,当使用“LOGINNAME”时,它显示“Daniel.Williams”)。
所以我知道如何将其放入字符串((setq usernm(getvar“Loginname”))
 
一旦我有了这个名字(这就是我被卡住的地方),我想取名字的第一个字母,去掉所有其他字母,直到“句号”,然后用其余字母以(D.Williams)结尾,然后将其放入a字符串中,放入我的标题栏。
 
我已经在互联网上和论坛上到处找过了,但找不到任何例子来帮助我了解如何做到这一点。
 
如果有人能帮我编写代码,这将是一个很大的帮助,因为我说我还在学习LISP,想学习更多关于语言的知识。
 
这将被安抚。
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 08:24:24 | 显示全部楼层
欢迎加入
;; 比如,在你得到它之后:
  1. (setq ln (getvar "loginname"))
  2. ;; and it returned "Daniel.Williams"
  3. ;;search for "."  within this string:
  4. (setq newString (vl-string-subst (substr ln 1 1) (substr ln 1 (vl-string-position (ascii ".") ln) ) ln ))
  5. (alert newString)
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:24:49 | 显示全部楼层
一种解决方案是按点拆分字符串,并按新规则重新组合:
 
  1. ;;; STR2LST
  2. ;;; Transforms a string with separator into a list of strings
  3. ;;; Author: Gile
  4. ;;; Arguments
  5. ;;; str = the string
  6. ;;; sep = the separator pattern
  7. (defun str2lst (str sep / pos)
  8. (if (setq pos (vl-string-search sep str))
  9.    (cons (substr str 1 pos)
  10.      (str2lst (substr str (+ (strlen sep) pos 1)) sep)
  11.    )
  12.    (list str)
  13. )
  14. )
  15. (setq usernm (getvar "Loginname")
  16.      usernm (str2lst usernm ".")
  17.      usernm (strcat (strcase (substr (car usernm) 1 1))
  18.                     "."
  19.                     (strcase (substr (cadr usernm) 1 1))
  20.                     (substr (cadr usernm) 2)))

 
当做
米尔恰
回复

使用道具 举报

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:29:41 | 显示全部楼层
嗨,伙计们
 
谢谢你的回复,我已经尝试了这两个代码,但都用“错误:错误参数类型:stringp nil”进行了回复
 
老实说,我不懂“vl”代码,我只是在了解基本代码。你能解释一下代码中发生了什么,让我理解发生了什么吗。
 
对不起,如果我遇到了愚蠢的,但这就是论坛在这里的目的,帮助像我这样的愚蠢的人哈哈。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:31:27 | 显示全部楼层
  1. (setq usernm (getvar "Loginname"))
  2. "Daniel.Williams"
  3. (strcat (substr usernm 1 1) (last (fnsplitl usernm)))
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:34:51 | 显示全部楼层
为了能够访问VisualLisp扩展的功能,请在代码中添加以下行:
 
  1. (vl-load-com)

 
当做
米尔卡
 
附:我在创业阶段就有它,所以把它视为理所当然,总是忘记把它添加到例子中。。。
回复

使用道具 举报

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:39:47 | 显示全部楼层
  1. (defun c:l2t ()
  2. (setq usernm (getvar "Loginname"));"Daniel.Williams"
  3. (strcat (substr usernm 1 1) (last (fnsplitl usernm)))
  4. );end

 
 
这就是我想要的
 
运行完代码后,我得到了(D.Williams)
 
但是当我列出(!usernm)时,它会给出(Daniel.Williams)如何将完成的结果放入字符串中。
 
谢谢pBe
回复

使用道具 举报

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:42:54 | 显示全部楼层
我想我拿到了
 
  1. (defun c:l2t ()
  2. (setq usernm (getvar "Loginname"));"Daniel.Williams"
  3. (setq tilnm (strcat (substr usernm 1 1) (last (fnsplitl usernm))))
  4. );end
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:45:44 | 显示全部楼层
真为你高兴。。
 
很高兴我能帮忙
 
干杯
回复

使用道具 举报

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:48:17 | 显示全部楼层
命令“fnsplitl”未在lisp帮助中列出,在哪里可以找到未列出的命令的信息。
 
很抱歉,对于“strcat”命令,您使用了数字,lisp帮助没有解释使用数字。
你能解释一下为什么以及他们做了什么,或者为我指出获取这些信息的方向吗。
 
再次感谢
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-9 07:37 , Processed in 0.566154 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表