想家的云 发表于 2019-1-21 23:57:19

提取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)

)
希望版主及各位路过的高手大侠能在百忙中为我答疑解惑,小生不胜感激。



wowan1314 发表于 2019-1-22 00:09:00

字符串搜索使用正则表达式啊!论坛有。
页: [1]
查看完整版本: 提取txt中的部分数据汇总为一个列表,程序有一个while循环内的列表最终无法输出