renhaitao_nice 发表于 2018-4-21 16:13:40

提取txt文件中的数字源码

发一个程序,用于提取txt文件中的数字。
并按行分组,组成一个列表。

(defun c:tt()
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setq cf (open "C:\\Users\\zz12344121\\Desktop\\A9R5B09.txt" "r"))
(setq n 1);预设行值1
(setq cnlist nil);初始化文本内容序列
(setq comment (READ-LINE cf))
(if comment
    (progn
    (setq cn (cons n comment))
    (setq cnlist (cons cn cnlist))
    )
    (progn
      (alert "NO COMMENT")
      (exit)
      ))
(while comment
    (setq comment (READ-LINE cf))
    (setq n (1+ n))
    (setq cn (cons n comment))
    (setq cnlist (cons cn cnlist))
    )
(setq cnlist (reverse cnlist))
(close cf)
;;获取数据列表后,开始
;;;提取字符串中的数据
(setq zong_numlist nil)
(setq j 1);第一行
(repeat (length cnlist)
   
   (setq i 1);字符串中第一个数
   (setq numlist nil)
          (setq hh (cdr (assoc j cnlist)));第j行字符串
       (if hh
   (while (<= i (strlen hh))
   (setq num (substr hh i 1))
   (setq i (1+ i))
   (if (and (>= (ascii num) 46) (<= (ascii num) 57));数字和乘除
       (progn
;(setq i (1+ i))
(setq num_next (substr hh i 1))
(while (and (>= (ascii num_next) 46) (<= (ascii num_next) 57));数字和乘除
    (setq num (strcat num num_next));数据累积
    (setq i (1+ i))
    (setq num_next (substr hh i 1))
    )
(setq i (1+ i));下一个字符不为数字,继续加,下次又判断一次
(setq numlist (cons num numlist))
)
   
       )
   )
)
   (setq numlist (reverse numlist));每行提取完毕
    (if numlist
    (setq zong_numlist (cons numlist zong_numlist))
      )
    (setq j (1+ j))
    )
(setq zong_numlist (reverse zong_numlist));提取完毕
      
)

xyp1964 发表于 2018-4-24 07:11:43

;; tt(提取txt文件中的数字)
(defun c:tt ()
(setq        lst (xyp-Txt2List "d:\\临时.txt")
        lst (mapcar '(lambda (x) (xyp-get-HzEngNum x 3)) lst)
        lst (vl-remove nil lst)
)
(princ lst)
(princ)
)
页: [1]
查看完整版本: 提取txt文件中的数字源码