求助:读取文件并按列将文件转换为表;
本帖最后由 77077 于 2014-2-12 23:05 编辑有一个txt文本,格式如下:
;序号 X Y Z
A0001 566786.336 3378751.937 5.014
B0002 566786.982 3378747.011 4.700
C0003 566787.331 3378747.086 4.822
D0004 566787.454 3378746.524 4.620
……
我想将每一列数据分别读取到不同的表中,以";"开头的不读取该行,希望得到结果如下:
lst1中就是(A001 B002 C003 D004……)
lst2中就是(566786.336 566786.982 566787.331566787.454……)
lst3......
lst4......
查找了写论坛代码,可能是没找仔细,暂时还没找到读取文本文件列到表的,希望高手们帮下忙.
;; 需要e派工具箱(XCAD)的支持:http://yunpan.cn/QXQKsW9gAPmpF
(defun c:tt ()
(setq lst(xyp-txt2list "d:\\临时.txt")
lst(vl-remove-if '(lambda (x) (= (substr x 1 1) ";")) lst)
lst(mapcar 'xyp-Get-Str2Lst lst)
lst1 (mapcar 'car lst)
lst2 (mapcar 'cadr lst)
lst3 (mapcar 'caddr lst)
lst4 (mapcar 'caddr lst)
)
(princ)
) 本帖最后由 77077 于 2014-2-13 12:44 编辑
院长果然厉害!
求编成函数代码"txt列到list"! 77077 发表于 2014-2-13 12:40 static/image/common/back.gif
院长果然厉害!
求编成函数代码"txt列到list"!;; (abc "d:\\临时.txt")
(defun abc (file-txt / lst)
(setq lst (xyp-txt2list file-txt)
lst (vl-remove-if '(lambda (x) (= (substr x 1 1) ";")) lst)
lst (mapcar 'xyp-Get-Str2Lst lst)
)
(list (mapcar 'car lst)
(mapcar 'cadr lst)
(mapcar 'caddr lst)
(mapcar 'caddr lst)
)
) 本帖最后由 77077 于 2014-2-13 16:00 编辑
文本数据格式如下
$ lst1 lst2 lst3 lst4 lst5 lst6
ID A 01 A1 B1 C1 D1
ID B 02 A2 B2 C2 D1
ID C 03 A3 B3 C3 D1
ID D 04 A4 B4 C4 D1
lst代码如下,不过只能获取到lst4(defun c:test (/ fp str lst )
(setq fp (open "D:\\MyTools\\lisp-txt.txt" "r")) ; 文件
(while (and (setq str (read-line fp)) (not (wcmatch str "ID*"))))
(while (not (wcmatch str "$$$$$$$$$$$$$$$$*"))
(setq lst (cons (read (strcat "(" (substr str 3) ")")) lst)
str (read-line fp)
) )
(close fp)
(reverse lst)
(setq lst1 (mapcar 'car lst)
lst2 (mapcar 'cadr lst)
lst3 (mapcar 'caddr lst)
lst4 (mapcar 'cadddr lst))
)有人说用nth,试着写了一下,都失败了!
(setq lst1 (nth 0 lst)
lst2 (nth 1 lst)
lst3 (nth 2 lst)
lst4 (nth 3 lst)
lst5 (nth 4 lst)
lst6 (nth 5 lst)) 用nth修改后运行结果
得到的数据不是按列,而是按行了! (setq lst1 (mapcar '(lambda (x) (nth 0 x)) lst)
lst2 (mapcar '(lambda (x) (nth 1 x)) lst)
lst3 (mapcar '(lambda (x) (nth 2 x)) lst)
lst4 (mapcar '(lambda (x) (nth 3 x)) lst)
lst5 (mapcar '(lambda (x) (nth 4 x)) lst)) 77077 发表于 2014-2-13 18:21 static/image/common/back.gif
(setq lst1 (mapcar '(lambda (x) (nth 0 x)) lst)
lst2 (mapcar '(lambda (x) (nth 1 x)) lst) ...
;; (abcd "d:\\临时.txt")
(defun abcd (file-txt / lst n lst1 i)
(setq lst(xyp-txt2list file-txt)
lst(vl-remove-if '(lambda (x) (= (substr x 1 1) ";")) lst)
lst(mapcar 'xyp-Get-Str2Lst lst)
lst1 '()
i 0
)
(repeat (length (car lst))
(setq a (mapcar '(lambda (x) (nth i x)) lst)
i (1+ i)
lst1 (cons a lst1)
)
)
(reverse lst1)
)
页:
[1]