GregGleason 发表于 2022-7-5 15:47:15

拆分Delimet的正确语法

我想这段代码需要快速修复。
 
我正在读取CSV,将记录拆分为一个变量,以便测试变量。
 
我尝试调用时出错:(LM:str->lst fil“,”)
 
关于我应该如何修复它,有什么建议吗?
 
格雷格

ronjonp 发表于 2022-7-5 15:55:52

尝试以下操作:
“out”将是您的列表列表
(defun c:readmycsv (/ fl out)
;; String to List-Lee Mac
;; Separates a string using a given delimiter
;; str - String to process
;; del - Delimiter by which to separate the string
;; Returns: List of strings
(defun lm:str->lst (str del / pos)
   (if        (setq pos (vl-string-search del str))
   (cons (substr str 1 pos) (lm:str->lst (substr str (+ pos 1 (strlen del))) del))
   (list str)
   )
)
(if (setq fl (open "C:\\Users\\ggleason\\Documents\\CAD\\AutoCAD\\Lisp\\Book1.csv" "r"))
   (progn (while (setq fil (read-line fl)) (setq out (cons (lm:str->lst fil ",") out))) (close fl))
)
(reverse out)
)

GregGleason 发表于 2022-7-5 15:56:53

朗琼普,
 
太棒了!
 
下一个问题是,当给定的字符串与第一条记录匹配时,如何查找?第一条记录包含。dwg名称。我想重点关注与打开的文件名匹配的记录。dwg文件。
 
格雷格

ronjonp 发表于 2022-7-5 16:00:44

可能是这样的:
(vl-remove-if-not '(lambda (x) (wcmatch (strcase (car x)) (strcase (getvar 'dwgname)))) out)

GregGleason 发表于 2022-7-5 16:07:48

这是替换了一行代码还是添加了一行代码?

ronjonp 发表于 2022-7-5 16:12:47

用上述代码替换最后一行(反向输出)。。应该只提供与当前图形匹配的线。

GregGleason 发表于 2022-7-5 16:15:26

太棒了!
 
我试图做的最后一件事是在字段上隔离,在本例中为“DATE”,并返回该值(请参阅sample.csv文件)。
 
我是否需要在您提供的替换代码行下方添加另一行代码?
Book1.csv

ronjonp 发表于 2022-7-5 16:18:12

相反,使用此选项(假设只有一条记录)将返回第一个子列表的最后一项。
(last
(car (vl-remove-if-not '(lambda (x) (wcmatch (strcase (car x)) (strcase (getvar 'dwgname)))) out))
)

GregGleason 发表于 2022-7-5 16:23:03

这接近于我想要的,但它选择了“NONE”作为值,而不是日期值。此外,可能存在列更改的情况。

ronjonp 发表于 2022-7-5 16:30:06

如果列发生更改,则需要在标题上找到索引,并使用该索引获取日期。
页: [1] 2
查看完整版本: 拆分Delimet的正确语法