明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1459|回复: 7

[已解答] 求助:读取文件并按列将文件转换为表;

[复制链接]
发表于 2014-2-12 23:02 | 显示全部楼层 |阅读模式
本帖最后由 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......


查找了写论坛代码,可能是没找仔细,暂时还没找到读取文本文件列到表的,希望高手们帮下忙.


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-2-13 00:20 | 显示全部楼层
  1. ;; 需要e派工具箱(XCAD)的支持:http://yunpan.cn/QXQKsW9gAPmpF
  2. (defun c:tt ()
  3.   (setq lst  (xyp-txt2list "d:\\临时.txt")
  4.         lst  (vl-remove-if '(lambda (x) (= (substr x 1 1) ";")) lst)
  5.         lst  (mapcar 'xyp-Get-Str2Lst lst)
  6.         lst1 (mapcar 'car lst)
  7.         lst2 (mapcar 'cadr lst)
  8.         lst3 (mapcar 'caddr lst)
  9.         lst4 (mapcar 'caddr lst)
  10.   )
  11.   (princ)
  12. )
 楼主| 发表于 2014-2-13 12:40 | 显示全部楼层
本帖最后由 77077 于 2014-2-13 12:44 编辑

院长果然厉害!
求编成函数代码"txt列到list"!
发表于 2014-2-13 13:03 | 显示全部楼层
77077 发表于 2014-2-13 12:40
院长果然厉害!
求编成函数代码"txt列到list"!
  1. ;; (abc "d:\\临时.txt")
  2. (defun abc (file-txt / lst)
  3.   (setq lst (xyp-txt2list file-txt)
  4.         lst (vl-remove-if '(lambda (x) (= (substr x 1 1) ";")) lst)
  5.         lst (mapcar 'xyp-Get-Str2Lst lst)
  6.   )
  7.   (list (mapcar 'car lst)
  8.         (mapcar 'cadr lst)
  9.         (mapcar 'caddr lst)
  10.         (mapcar 'caddr lst)
  11.   )  
  12. )
 楼主| 发表于 2014-2-13 15:54 | 显示全部楼层
本帖最后由 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
  1. (defun c:test (/ fp str lst )
  2.    (setq fp (open "D:\\MyTools\\lisp-txt.txt" "r"))    ; 文件
  3.    (while (and (setq str (read-line fp)) (not (wcmatch str "ID*"))))
  4.    (while (not (wcmatch str "$$$$$$$$$$$$$$$$*"))
  5.      (setq lst (cons (read (strcat "(" (substr str 3) ")")) lst)
  6.            str (read-line fp)
  7.    ) )
  8.    (close fp)
  9.    (reverse lst)
  10.   (setq lst1 (mapcar 'car lst)
  11.         lst2 (mapcar 'cadr lst)
  12.         lst3 (mapcar 'caddr lst)
  13.         lst4 (mapcar 'cadddr lst))
  14. )
有人说用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))
 楼主| 发表于 2014-2-13 16:03 | 显示全部楼层
用nth修改后运行结果
得到的数据不是按列,而是按行了!
 楼主| 发表于 2014-2-13 18:21 | 显示全部楼层
  (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))
发表于 2014-2-13 19:30 | 显示全部楼层
77077 发表于 2014-2-13 18:21
(setq lst1 (mapcar '(lambda (x) (nth 0 x)) lst)
        lst2 (mapcar '(lambda (x) (nth 1 x)) lst) ...
  1. ;; (abcd "d:\\临时.txt")
  2. (defun abcd (file-txt / lst n lst1 i)
  3.   (setq lst  (xyp-txt2list file-txt)
  4.         lst  (vl-remove-if '(lambda (x) (= (substr x 1 1) ";")) lst)
  5.         lst  (mapcar 'xyp-Get-Str2Lst lst)
  6.         lst1 '()
  7.         i 0
  8.   )
  9.   (repeat (length (car lst))
  10.     (setq a (mapcar '(lambda (x) (nth i x)) lst)
  11.           i (1+ i)
  12.           lst1 (cons a lst1)
  13.     )
  14.   )
  15.   (reverse lst1)
  16. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-20 03:53 , Processed in 0.157177 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表