提取txt中的部分数据汇总为一个列表,程序有一个while循环内的列表最终无法输出
自己借鉴图书与论坛编的程序,有个小bug实在是改不动带提取TXT文件格式如下,文后有附件:
jpos100.extax.eax_a:=jpos100.extax.eax_a+1400;
MoveExtJ jpos100\ID:=1\UseEOffs,v_trolley_5_m_mm,fine;
jpos100.extax.eax_a:=jpos100.extax.eax_a+0;
MoveExtJ jpos100\ID:=2\UseEOffs,v_trolley_20_m_mm,fine;
jpos100.extax.eax_a:=jpos100.extax.eax_a-1305;
MoveExtJ jpos100\ID:=3\UseEOffs,v_trolley_6_m_mm,fine;
我自己编的程序如下,主要是吧每段落中的第一行中a+后的数字提取出来,如第一段中的1400,第二段的0,然后汇总为一个列表以供下一步的调用操作,但是好像程序循环结束之后没有返回想要是数据列表:
(defun c:getxc ()
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setq ffncar (getfiled "选取一个txt待仿真小车运动指令文件""" "txt" 2))
(setq cf (open ffncar "r"))
(setq n 1);预设行值1
(setq xcnlist nil);初始化文本内容序列
(setq xcomment (READ-LINE cf))
(while xcomment
(setq n (1+ n))
(setq xcnlist (cons xcomment xcnlist))
(setq xcomment (read-line cf))
(setq xcomment (read-line cf))
(setq xcomment (read-line cf))
)
(setq xcnlist (reverse xcnlist))
;(prin1 xcnlist);已经可以输出X位移所在行的结合列表
(setq i -1)
(setq listx ())
(setq ni (length xcnlist))
(prin1 ni)
(while (< i ni)
(setq i (1+ i))
(setq xdatacar (nth i xcnlist))
(setq xn1 (vl-string-search ":=jpos100.extax.eax_a" xdatacar))
(setq charxn1 (substr xdatacar (+ xn1 22)))
(setq xn11 (vl-string-search ";" charxn1))
(setq movexc (substr charxn1 1 xn11 ))
(setq movexn (atof movexc))
(setq listx (cons movexn listx))
(prin1 i)
(prin1 listx)
;|(if (= i (- (length xcnlist) 3))
(progn
(setq listxend listx)
(prin1 listend))
)|;
)
;(setq listend (reverse listend))
(prin1 listx)
)
希望版主及各位路过的高手大侠能在百忙中为我答疑解惑,小生不胜感激。
字符串搜索使用正则表达式啊!论坛有。
页:
[1]