Luís Augusto 发表于 2022-7-6 00:07:51

(教程)使用AutoLISP按标记读取文件
«日期:2008年1月22日下午04:25:41»
 
http://www.theswamp.org/index.php?topic=21047.0
 
[需要沼泽会员才能查看]

Luís Augusto 发表于 2022-7-6 00:12:47

大家好,我需要帮助解决这个问题。
看到下面的代码正在工作,但我不满意。
 
(defun c:query ()
(setq fo (open "C:\\Users\\Augusto\\Desktop\\Sample.csv" "r"))
(setq cod (strcase (getstring t "\nEnter code: "))) ;"AM0.35" or "CZ0.35" ....
(while (setq aline (read-line fo))
   (if        (wcmatch aline (strcat "*" cod))
       (setq cod (substr aline (+ 2 (strlen cod))))
); if
); while
(alert (strcat "Found a match: " cod "\n"))
(princ)

(close fo)
)
测试:样品。csv
 
我想学习如何创建一个不需要一直访问文件的函数。
我正试图找到一种方法来检索另一个列表中的一个列表,它的部分值是已知的。
 
Lee Mac编写的“ReadCSV-V1-3”代码,传递到变量“data”,一个包含值的列表​​从文件中,但找不到使用它的方法。
 
我的想法是这样的。在代码的开头,我读取了外部文件并将其存储在一个名为“table”的变量中。退出程序时不会清除此变量,因为它是代码的新执行,我检查它是否干净。这样就不需要不断访问文件。
 
我对学习这门学科很感兴趣。
非常感谢你。

BIGAL 发表于 2022-7-6 00:15:43

我不会用变量“table”可能会得到一个保留字的问题,任何方式回答你的要求。
 

(if (= partslist nil)
(progn
(setq fo (open "C:\\Users\\Augusto\\Desktop\\Sample.csv" "r"))
(while (setq partslist (cons (read-line fo) partslist)))
)
(close fo)
(alert "partslist now available use nth to retrieve")
)
)

Luís Augusto 发表于 2022-7-6 00:18:02

正是这一部分我遇到了麻烦。
就我所知,函数nth(nth)需要知道您在列表中的位置。
鉴于这一困难,我进一步研究了vl函数。
我找到了vl成员if函数。
我想过使用vl成员if将列表带到第一个位置,并遵循第n个函数(nth)0?这行得通吗?
 
或者有其他解决方案?
 
非常感谢。

hmsilva 发表于 2022-7-6 00:20:41

嗨,路易斯,
如果我理解正确的话,也许是这样的。。。
需要Lee Mac的LM:readcsv例程。

(defun c:test (/ ANS FILE STR)
(if (not *mylist*)
   (if (setq file "C:\\Users\\Augusto\\Desktop\\Sample.csv")
   (setq *mylist* (LM:readcsv file))
   (princ "\nSample.csv was not found!")
   )
)
(cond (*mylist*
(if (setq str (getstring "\nEnter code: "))
   (progn
   (foreach x *mylist*
       (if (wcmatch (car x) str)
(setq ans (cadr x))
       )
   )
   (if ans
       (alert (strcat "Found a match: \n" ans "\n"))
       (alert "\nMatch not faund!!")
   )
   )
)
)
)
(princ)
)

 
如果你有任何问题,请在Portugès给我发邮件。。。
HTH公司
亨里克

Luís Augusto 发表于 2022-7-6 00:25:34

完美的
 
谢谢你,亨利,你完全理解我的需要。
你的代码很容易理解。谢谢你和我分享你的知识。
 
祝你好运,路易斯·奥古斯托。

hmsilva 发表于 2022-7-6 00:28:29

不客气,路易斯·奥古斯托
很高兴我能帮忙
 
 
亨里克

Lee Mac 发表于 2022-7-6 00:30:51

 
良好的执行Henrique-
 
如果你不介意的话,我有一些小建议[以下内容未经测试]:
(defun c:test ( / ans str )
   (if (or *mylist* (setq *mylist* (LM:readcsv "C:\\Users\\Augusto\\Desktop\\Sample.csv")))
       (if (/= "" (setq str (getstring t "\nEnter code <exit>: ")))
         (if (setq ans (vl-member-if '(lambda ( x ) (wcmatch (car x) str)) *mylist*))
               (alert (strcat "Found a match:\n" (car ans)))
               (alert "Match not found.")
         )
       )
       (princ "\nSample.csv not found.")
   )
   (princ)
)自:
 
(setq文件“C:\\Users\\Augusto\\Desktop\\Sample.csv”)
 

(setq str(getstring“\n输入代码:”))
 
将始终返回非nil值,如果vl成员似乎更适合此任务,则返回vl成员。
 

hmsilva 发表于 2022-7-6 00:33:04

谢谢你,李
修改得很好!
 
亨里克

Luís Augusto 发表于 2022-7-6 00:36:55

感谢大家为我的学习做出的贡献。
 
当做
路易斯·奥古斯托
页: 1 [2]
查看完整版本: 进行查询