Jump to content

Recommended Posts

Posted

Hi. I have some *.txt files with coordinates and i want to join them to one *.txt

 

Is it possible to do this with a lisp ?

 

Thanks

Posted

Quickly written:

(defun mergetxt ( lst out / ds1 ds2 str )
   (if (setq ds1 (open out "w"))
       (progn
           (foreach txt lst
               (if (setq ds2 (open txt "r"))
                   (progn
                       (while (setq str (read-line ds2))
                           (write-line str ds1)
                       )
                       (close ds2)
                   )
               )
           )
           (close ds1)
           out
       )
   )
)

Call with list of text files to merge (in order) and filepath for merged text file, e.g.:

(mergetxt '("C:\\YourFile1.txt" "C:\\YourFile2.txt" "C:\\YourFile3.txt") "C:\\YourMergedFile.txt")

Posted

Hi Lee Mac . Thank you for the post. I try to use it but gives me this error

 

Command: MERGETXT
; error: too few arguments

Posted
I try to use it but gives me this error

Command: MERGETXT
; error: too few arguments

 

You are not calling the function in the manner I have described - please re-read my post above.

Posted

Hi Lee Mac. I don't know how to continue this code.Can you finish it ?

 

Thanks

Posted

The function is already finished - it is ready to use in your program or at the console, in the manner I have described above.

Posted

Sorry Lee Mac. I can not understand the code.Is it posible to open a window and select the folder with this files ?

 

Thanks

Posted

Yes, you could use my Get Files Dialog function, e.g.:

(defun c:test ( / lst out )
   (if 
       (and
           (setq lst (LM:getfiles "Select Text Files" nil "txt"))
           (setq out (getfiled "Output file" "" "txt" 1))
       )
       (mergetxt lst out)
   )
   (princ)
)

Posted

Thanks you Lee Mac for the help. I did what you said

 

;;------------------=={ Get Files Dialog }==------------------;;
;;                                                            ;;
;;  An analog of the 'getfiled' function for multiple files.  ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2014 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  msg - Dialog box label; 'Select Files' if nil or "".      ;;
;;  def - Default directory; dwgprefix if nil or "".          ;;
;;  ext - File extension filter (e.g. "dwg;lsp"); "*" if nil  ;;
;;------------------------------------------------------------;;
;;  Returns:  List of selected files, else nil                ;;
;;------------------------------------------------------------;;
;;  Version 1.4    -    09-08-2014                            ;;
;;------------------------------------------------------------;;

(defun LM:getfiles ( msg def ext / *error* dch dcl des dir dirdata lst rtn )

   (defun *error* ( msg )
       (if (= 'file (type des))
           (close des)
       )
       (if (and (= 'int (type dch)) (< 0 dch))
           (unload_dialog dch)
       )
       (if (and (= 'str (type dcl)) (findfile dcl))
           (vl-file-delete dcl)
       )
       (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
           (princ (strcat "\nError: " msg))
       )
       (princ)
   )    
   
   (if
       (and
           (setq dcl (vl-filename-mktemp nil nil ".dcl"))
           (setq des (open dcl "w"))
           (progn
               (foreach x
                  '(
                       "lst : list_box"
                       "{"
                       "    width = 40.0;"
                       "    height = 20.0;"
                       "    fixed_width = true;"
                       "    fixed_height = true;"
                       "    alignment = centered;"
                       "    multiple_select = true;"
                       "}"
                       "but : button"
                       "{"
                       "    width = 20.0;"
                       "    height = 1.8;"
                       "    fixed_width = true;"
                       "    fixed_height = true;"
                       "    alignment = centered;"
                       "}"
                       "getfiles : dialog"
                       "{"
                       "    key = \"title\"; spacer;"
                       "    : row"
                       "    {"
                       "        alignment = centered;"
                       "        : edit_box { key = \"dir\"; label = \"Folder:\"; }"
                       "        : button"
                       "        {"
                       "            key = \"brw\";"
                       "            label = \"Browse\";"
                       "            fixed_width = true;"
                       "        }"
                       "    }"
                       "    spacer;"
                       "    : row"
                       "    {"
                       "        : column"
                       "        {"
                       "            : lst { key = \"box1\"; }"
                       "            : but { key = \"add\" ; label = \"Add Files\"; }"
                       "        }"
                       "        : column {"
                       "            : lst { key = \"box2\"; }"
                       "            : but { key = \"del\" ; label = \"Remove Files\"; }"
                       "        }"
                       "    }"
                       "    spacer; ok_cancel;"
                       "}"
                   )
                   (write-line x des)
               )
               (setq des (close des))
               (< 0 (setq dch (load_dialog dcl)))
           )
           (new_dialog "getfiles" dch)
       )
       (progn
           (setq ext (if (= 'str (type ext)) (LM:getfiles:str->lst (strcase ext) ";") '("*")))
           (set_tile "title" (if (member msg '(nil "")) "Select Files" msg))
           (set_tile "dir"
               (setq dir
                   (LM:getfiles:fixdir
                       (if (or (member def '(nil "")) (not (vl-file-directory-p (LM:getfiles:fixdir def))))
                           (getvar 'dwgprefix)
                           def
                       )
                   )
               )
           )
           (setq lst (LM:getfiles:updatefilelist dir ext nil))
           (mode_tile "add" 1)
           (mode_tile "del" 1)

           (action_tile "brw"
               (vl-prin1-to-string
                  '(if (setq tmp (LM:getfiles:browseforfolder "" nil 512))
                       (setq lst (LM:getfiles:updatefilelist (set_tile "dir" (setq dir tmp)) ext rtn)
                             rtn (LM:getfiles:updateselected dir rtn)
                       )                              
                   )
               )
           )

           (action_tile "dir"
               (vl-prin1-to-string
                  '(if (= 1 $reason)
                       (setq lst (LM:getfiles:updatefilelist (set_tile "dir" (setq dir (LM:getfiles:fixdir $value))) ext rtn)
                             rtn (LM:getfiles:updateselected dir rtn)
                       )
                   )
               )
           )

           (action_tile "box1"
               (vl-prin1-to-string
                  '(
                       (lambda ( / itm tmp )
                           (if (setq itm (mapcar '(lambda ( n ) (nth n lst)) (read (strcat "(" $value ")"))))
                               (if (= 4 $reason)
                                   (cond
                                       (   (equal '("..") itm)
                                           (setq lst (LM:getfiles:updatefilelist (set_tile "dir" (setq dir (LM:getfiles:updir dir))) ext rtn)
                                                 rtn (LM:getfiles:updateselected dir rtn)
                                           )
                                       )
                                       (   (vl-file-directory-p (setq tmp (LM:getfiles:checkredirect (strcat dir "\\" (car itm)))))
                                           (setq lst (LM:getfiles:updatefilelist (set_tile "dir" (setq dir tmp)) ext rtn)
                                                 rtn (LM:getfiles:updateselected dir rtn)
                                           )
                                       )
                                       (   (setq rtn (LM:getfiles:sort (append rtn (mapcar '(lambda ( x ) (strcat dir "\\" x)) itm)))
                                                 rtn (LM:getfiles:updateselected dir rtn)
                                                 lst (LM:getfiles:updatefilelist dir ext rtn)
                                           )
                                       )
                                   )
                                   (if (vl-some '(lambda ( x ) (not (vl-file-directory-p x))) itm)
                                       (mode_tile "add" 0)
                                       (mode_tile "add" 1)
                                   )
                               )
                           )
                       )
                   )
               )
           )

           (action_tile "box2"
               (vl-prin1-to-string
                  '(
                       (lambda ( / itm )
                           (if (setq itm (mapcar '(lambda ( n ) (nth n rtn)) (read (strcat "(" $value ")"))))
                               (if (= 4 $reason)
                                   (setq rtn (LM:getfiles:updateselected dir (vl-remove (car itm) rtn))
                                         lst (LM:getfiles:updatefilelist dir ext rtn)
                                   )
                                   (mode_tile "del" 0)
                               )
                           )
                       )
                   )
               )
           )

           (action_tile "add"
               (vl-prin1-to-string
                  '(
                       (lambda ( / itm )
                           (if
                               (setq itm
                                   (vl-remove-if 'vl-file-directory-p
                                       (mapcar '(lambda ( n ) (nth n lst)) (read (strcat "(" (get_tile "box1") ")")))
                                   )
                               )
                               (setq rtn (LM:getfiles:sort (append rtn (mapcar '(lambda ( x ) (strcat dir "\\" x)) itm)))
                                     rtn (LM:getfiles:updateselected dir rtn)
                                     lst (LM:getfiles:updatefilelist dir ext rtn)
                               )
                           )
                           (mode_tile "add" 1)
                           (mode_tile "del" 1)
                       )
                   )
               )
           )

           (action_tile "del"
               (vl-prin1-to-string
                  '(
                       (lambda ( / itm )
                           (if (setq itm (read (strcat "(" (get_tile "box2") ")")))
                               (setq rtn (LM:getfiles:updateselected dir (LM:getfiles:removeitems itm rtn))
                                     lst (LM:getfiles:updatefilelist dir ext rtn)
                               )
                           )
                           (mode_tile "add" 1)
                           (mode_tile "del" 1)
                       )
                   )
               )
           )
        
           (if (zerop (start_dialog))
               (setq rtn nil)
           )
       )
   )
   (*error* nil)
   rtn
)

(defun LM:getfiles:listbox ( key lst )
   (start_list key)
   (foreach x lst (add_list x))
   (end_list)
   lst
)

(defun LM:getfiles:listfiles ( dir ext lst )
   (vl-remove-if '(lambda ( x ) (member (strcat dir "\\" x) lst))
       (cond
           (   (cdr (assoc dir dirdata)))
           (   (cdar
                   (setq dirdata
                       (cons
                           (cons dir
                               (append
                                   (LM:getfiles:sortlist (vl-remove "." (vl-directory-files dir nil -1)))
                                   (LM:getfiles:sort
                                       (if (member ext '(("") ("*")))
                                           (vl-directory-files dir nil 1)
                                           (vl-remove-if-not
                                               (function
                                                   (lambda ( x / e )
                                                       (and
                                                           (setq e (vl-filename-extension x))
                                                           (setq e (strcase (substr e 2)))
                                                           (vl-some '(lambda ( w ) (wcmatch e w)) ext)
                                                       )
                                                   )
                                               )
                                               (vl-directory-files dir nil 1)
                                           )
                                       )
                                   )
                               )
                           )
                           dirdata
                       )
                   )
               )
           )
       )
   )
)

(defun LM:getfiles:checkredirect ( dir / itm pos )
   (cond
       (   (vl-directory-files dir) dir)
       (   (and
               (=  (strcase (getenv "UserProfile"))
                   (strcase (substr dir 1 (setq pos (vl-string-position 92 dir nil t))))
               )
               (setq itm
                   (cdr
                       (assoc (substr (strcase dir t) (+ pos 2))
                          '(
                               ("my documents" . "Documents")
                               ("my pictures"  . "Pictures")
                               ("my videos"    . "Videos")
                               ("my music"     . "Music")
                           )
                       )
                   )
               )
               (vl-file-directory-p (setq itm (strcat (substr dir 1 pos) "\\" itm)))
           )
           itm
       )
       (   dir   )
   )
)

(defun LM:getfiles:sort ( lst )
   (apply 'append
       (mapcar 'LM:getfiles:sortlist
           (vl-sort
               (LM:getfiles:groupbyfunction lst
                   (lambda ( a b / x y )
                       (and
                           (setq x (vl-filename-extension a))
                           (setq y (vl-filename-extension b))
                           (= (strcase x) (strcase y))
                       )
                   )
               )
               (function
                   (lambda ( a b / x y )
                       (and
                           (setq x (vl-filename-extension (car a)))
                           (setq y (vl-filename-extension (car b)))
                           (< (strcase x) (strcase y))
                       )
                   )
               )
           )
       )
   )
)

(defun LM:getfiles:sortlist ( lst )
   (mapcar (function (lambda ( n ) (nth n lst)))
       (vl-sort-i (mapcar 'LM:getfiles:splitstring lst)
           (function
               (lambda ( a b / x y )
                   (while
                       (and
                           (setq x (car a))
                           (setq y (car b))
                           (= x y)
                       )
                       (setq a (cdr a)
                             b (cdr b)
                       )
                   )
                   (cond
                       (   (null x) b)
                       (   (null y) nil)
                       (   (and (numberp x) (numberp y)) (< x y))
                       (   (= "." x))
                       (   (numberp x))
                       (   (numberp y) nil)
                       (   (< x y))
                   )
               )
           )
       )
   )
)

(defun LM:getfiles:groupbyfunction ( lst fun / tmp1 tmp2 x1 )
   (if (setq x1 (car lst))
       (progn
           (foreach x2 (cdr lst)
               (if (fun x1 x2)
                   (setq tmp1 (cons x2 tmp1))
                   (setq tmp2 (cons x2 tmp2))
               )
           )
           (cons (cons x1 (reverse tmp1)) (LM:getfiles:groupbyfunction (reverse tmp2) fun))
       )
   )
)

(defun LM:getfiles:splitstring ( str )
   (
       (lambda ( l )
           (read
               (strcat "("
                   (vl-list->string
                       (apply 'append
                           (mapcar
                               (function
                                   (lambda ( a b c )
                                       (cond
                                           (   (= 92 b)
                                               (list 32 34 92 b 34 32)
                                           )
                                           (   (or (< 47 b 58)
                                                   (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                                                   (and (= 46 b) (< 47 a 58) (< 47 c 58))
                                               )
                                               (list b)
                                           )
                                           (   (list 32 34 b 34 32))
                                       )
                                   )
                               )
                               (cons nil l) l (append (cdr l) '(( )))
                           )
                       )
                   )
                   ")"
               )
           )
       )
       (vl-string->list (strcase str))
   )
)

(defun LM:getfiles:browseforfolder ( msg dir flg / err fld pth shl slf )
   (setq err
       (vl-catch-all-apply
           (function
               (lambda ( / app hwd )
                   (if (setq app (vlax-get-acad-object)
                             shl (vla-getinterfaceobject app "shell.application")
                             hwd (vl-catch-all-apply 'vla-get-hwnd (list app))
                             fld (vlax-invoke-method shl 'browseforfolder (if (vl-catch-all-error-p hwd) 0 hwd) msg flg dir)
                       )
                       (setq slf (vlax-get-property fld 'self)
                             pth (LM:getfiles:fixdir (vlax-get-property slf 'path))
                       )
                   )
               )
           )
       )
   )
   (if slf (vlax-release-object slf))
   (if fld (vlax-release-object fld))
   (if shl (vlax-release-object shl))
   (if (vl-catch-all-error-p err)
       (prompt (vl-catch-all-error-message err))
       pth
   )
)

(defun LM:getfiles:full->relative ( dir path / p q )
   (setq dir (vl-string-right-trim "\\" dir))
   (cond
       (   (and
               (setq p (vl-string-position 58  dir))
               (setq q (vl-string-position 58 path))
               (/= (strcase (substr dir 1 p)) (strcase (substr path 1 q)))
           )
           path
       )
       (   (and
               (setq p (vl-string-position 92  dir))
               (setq q (vl-string-position 92 path))
               (= (strcase (substr dir 1 p)) (strcase (substr path 1 q)))
           )
           (LM:getfiles:full->relative (substr dir (+ 2 p)) (substr path (+ 2 q)))
       )
       (   (and
               (setq q (vl-string-position 92 path))
               (= (strcase dir) (strcase (substr path 1 q)))
           )
           (strcat ".\\" (substr path (+ 2 q)))
       )
       (   (= "" dir)
           path
       )
       (   (setq p (vl-string-position 92 dir))
           (LM:getfiles:full->relative (substr dir (+ 2 p)) (strcat "..\\" path))
       )
       (   (LM:getfiles:full->relative "" (strcat "..\\" path)))
   )
)

(defun LM:getfiles:str->lst ( str del / pos )
   (if (setq pos (vl-string-search del str))
       (cons (substr str 1 pos) (LM:getfiles:str->lst (substr str (+ pos 1 (strlen del))) del))
       (list str)
   )
)

(defun LM:getfiles:updatefilelist ( dir ext lst )
   (LM:getfiles:listbox "box1" (LM:getfiles:listfiles dir ext lst))
)

(defun LM:getfiles:updateselected ( dir lst )
   (LM:getfiles:listbox "box2" (mapcar '(lambda ( x ) (LM:getfiles:full->relative dir x)) lst))
   lst
)

(defun LM:getfiles:updir ( dir )
   (substr dir 1 (vl-string-position 92 dir nil t))
)

(defun LM:getfiles:fixdir ( dir )
   (vl-string-right-trim "\\" (vl-string-translate "/" "\\" dir))
)

(defun LM:getfiles:removeitems ( itm lst / idx )
   (setq idx -1)
   (vl-remove-if '(lambda ( x ) (member (setq idx (1+ idx)) itm)) lst)
)

(vl-load-com)
(princ)
(defun c:mergetxt ( lst out / ds1 ds2 str )
   (if (setq ds1 (open out "w"))
       (progn
           (foreach txt lst
               (if (setq ds2 (open txt "r"))
                   (progn
                       (while (setq str (read-line ds2))
                           (write-line str ds1)
                       )
                       (close ds2)
                   )
               )
           )
           (close ds1)
           out
       )
   )
)

(defun c:test ( / lst out )
   (if 
       (and
           (setq lst (LM:getfiles "Select Text Files" nil "txt"))
           (setq out (getfiled "Output file" "" "txt" 1))
       )
       (mergetxt lst out)
   )
   (princ)
)

 

But gives me this message

 

Command: TEST
; error: no function definition: MERGETXT

Posted

Sorry my mistake Lee Mac .I fix it

 

;;------------------=={ Get Files Dialog }==------------------;;
;;                                                            ;;
;;  An analog of the 'getfiled' function for multiple files.  ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2014 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  msg - Dialog box label; 'Select Files' if nil or "".      ;;
;;  def - Default directory; dwgprefix if nil or "".          ;;
;;  ext - File extension filter (e.g. "dwg;lsp"); "*" if nil  ;;
;;------------------------------------------------------------;;
;;  Returns:  List of selected files, else nil                ;;
;;------------------------------------------------------------;;
;;  Version 1.4    -    09-08-2014                            ;;
;;------------------------------------------------------------;;

(defun LM:getfiles ( msg def ext / *error* dch dcl des dir dirdata lst rtn )

   (defun *error* ( msg )
       (if (= 'file (type des))
           (close des)
       )
       (if (and (= 'int (type dch)) (< 0 dch))
           (unload_dialog dch)
       )
       (if (and (= 'str (type dcl)) (findfile dcl))
           (vl-file-delete dcl)
       )
       (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
           (princ (strcat "\nError: " msg))
       )
       (princ)
   )    
   
   (if
       (and
           (setq dcl (vl-filename-mktemp nil nil ".dcl"))
           (setq des (open dcl "w"))
           (progn
               (foreach x
                  '(
                       "lst : list_box"
                       "{"
                       "    width = 40.0;"
                       "    height = 20.0;"
                       "    fixed_width = true;"
                       "    fixed_height = true;"
                       "    alignment = centered;"
                       "    multiple_select = true;"
                       "}"
                       "but : button"
                       "{"
                       "    width = 20.0;"
                       "    height = 1.8;"
                       "    fixed_width = true;"
                       "    fixed_height = true;"
                       "    alignment = centered;"
                       "}"
                       "getfiles : dialog"
                       "{"
                       "    key = \"title\"; spacer;"
                       "    : row"
                       "    {"
                       "        alignment = centered;"
                       "        : edit_box { key = \"dir\"; label = \"Folder:\"; }"
                       "        : button"
                       "        {"
                       "            key = \"brw\";"
                       "            label = \"Browse\";"
                       "            fixed_width = true;"
                       "        }"
                       "    }"
                       "    spacer;"
                       "    : row"
                       "    {"
                       "        : column"
                       "        {"
                       "            : lst { key = \"box1\"; }"
                       "            : but { key = \"add\" ; label = \"Add Files\"; }"
                       "        }"
                       "        : column {"
                       "            : lst { key = \"box2\"; }"
                       "            : but { key = \"del\" ; label = \"Remove Files\"; }"
                       "        }"
                       "    }"
                       "    spacer; ok_cancel;"
                       "}"
                   )
                   (write-line x des)
               )
               (setq des (close des))
               (< 0 (setq dch (load_dialog dcl)))
           )
           (new_dialog "getfiles" dch)
       )
       (progn
           (setq ext (if (= 'str (type ext)) (LM:getfiles:str->lst (strcase ext) ";") '("*")))
           (set_tile "title" (if (member msg '(nil "")) "Select Files" msg))
           (set_tile "dir"
               (setq dir
                   (LM:getfiles:fixdir
                       (if (or (member def '(nil "")) (not (vl-file-directory-p (LM:getfiles:fixdir def))))
                           (getvar 'dwgprefix)
                           def
                       )
                   )
               )
           )
           (setq lst (LM:getfiles:updatefilelist dir ext nil))
           (mode_tile "add" 1)
           (mode_tile "del" 1)

           (action_tile "brw"
               (vl-prin1-to-string
                  '(if (setq tmp (LM:getfiles:browseforfolder "" nil 512))
                       (setq lst (LM:getfiles:updatefilelist (set_tile "dir" (setq dir tmp)) ext rtn)
                             rtn (LM:getfiles:updateselected dir rtn)
                       )                              
                   )
               )
           )

           (action_tile "dir"
               (vl-prin1-to-string
                  '(if (= 1 $reason)
                       (setq lst (LM:getfiles:updatefilelist (set_tile "dir" (setq dir (LM:getfiles:fixdir $value))) ext rtn)
                             rtn (LM:getfiles:updateselected dir rtn)
                       )
                   )
               )
           )

           (action_tile "box1"
               (vl-prin1-to-string
                  '(
                       (lambda ( / itm tmp )
                           (if (setq itm (mapcar '(lambda ( n ) (nth n lst)) (read (strcat "(" $value ")"))))
                               (if (= 4 $reason)
                                   (cond
                                       (   (equal '("..") itm)
                                           (setq lst (LM:getfiles:updatefilelist (set_tile "dir" (setq dir (LM:getfiles:updir dir))) ext rtn)
                                                 rtn (LM:getfiles:updateselected dir rtn)
                                           )
                                       )
                                       (   (vl-file-directory-p (setq tmp (LM:getfiles:checkredirect (strcat dir "\\" (car itm)))))
                                           (setq lst (LM:getfiles:updatefilelist (set_tile "dir" (setq dir tmp)) ext rtn)
                                                 rtn (LM:getfiles:updateselected dir rtn)
                                           )
                                       )
                                       (   (setq rtn (LM:getfiles:sort (append rtn (mapcar '(lambda ( x ) (strcat dir "\\" x)) itm)))
                                                 rtn (LM:getfiles:updateselected dir rtn)
                                                 lst (LM:getfiles:updatefilelist dir ext rtn)
                                           )
                                       )
                                   )
                                   (if (vl-some '(lambda ( x ) (not (vl-file-directory-p x))) itm)
                                       (mode_tile "add" 0)
                                       (mode_tile "add" 1)
                                   )
                               )
                           )
                       )
                   )
               )
           )

           (action_tile "box2"
               (vl-prin1-to-string
                  '(
                       (lambda ( / itm )
                           (if (setq itm (mapcar '(lambda ( n ) (nth n rtn)) (read (strcat "(" $value ")"))))
                               (if (= 4 $reason)
                                   (setq rtn (LM:getfiles:updateselected dir (vl-remove (car itm) rtn))
                                         lst (LM:getfiles:updatefilelist dir ext rtn)
                                   )
                                   (mode_tile "del" 0)
                               )
                           )
                       )
                   )
               )
           )

           (action_tile "add"
               (vl-prin1-to-string
                  '(
                       (lambda ( / itm )
                           (if
                               (setq itm
                                   (vl-remove-if 'vl-file-directory-p
                                       (mapcar '(lambda ( n ) (nth n lst)) (read (strcat "(" (get_tile "box1") ")")))
                                   )
                               )
                               (setq rtn (LM:getfiles:sort (append rtn (mapcar '(lambda ( x ) (strcat dir "\\" x)) itm)))
                                     rtn (LM:getfiles:updateselected dir rtn)
                                     lst (LM:getfiles:updatefilelist dir ext rtn)
                               )
                           )
                           (mode_tile "add" 1)
                           (mode_tile "del" 1)
                       )
                   )
               )
           )

           (action_tile "del"
               (vl-prin1-to-string
                  '(
                       (lambda ( / itm )
                           (if (setq itm (read (strcat "(" (get_tile "box2") ")")))
                               (setq rtn (LM:getfiles:updateselected dir (LM:getfiles:removeitems itm rtn))
                                     lst (LM:getfiles:updatefilelist dir ext rtn)
                               )
                           )
                           (mode_tile "add" 1)
                           (mode_tile "del" 1)
                       )
                   )
               )
           )
        
           (if (zerop (start_dialog))
               (setq rtn nil)
           )
       )
   )
   (*error* nil)
   rtn
)

(defun LM:getfiles:listbox ( key lst )
   (start_list key)
   (foreach x lst (add_list x))
   (end_list)
   lst
)

(defun LM:getfiles:listfiles ( dir ext lst )
   (vl-remove-if '(lambda ( x ) (member (strcat dir "\\" x) lst))
       (cond
           (   (cdr (assoc dir dirdata)))
           (   (cdar
                   (setq dirdata
                       (cons
                           (cons dir
                               (append
                                   (LM:getfiles:sortlist (vl-remove "." (vl-directory-files dir nil -1)))
                                   (LM:getfiles:sort
                                       (if (member ext '(("") ("*")))
                                           (vl-directory-files dir nil 1)
                                           (vl-remove-if-not
                                               (function
                                                   (lambda ( x / e )
                                                       (and
                                                           (setq e (vl-filename-extension x))
                                                           (setq e (strcase (substr e 2)))
                                                           (vl-some '(lambda ( w ) (wcmatch e w)) ext)
                                                       )
                                                   )
                                               )
                                               (vl-directory-files dir nil 1)
                                           )
                                       )
                                   )
                               )
                           )
                           dirdata
                       )
                   )
               )
           )
       )
   )
)

(defun LM:getfiles:checkredirect ( dir / itm pos )
   (cond
       (   (vl-directory-files dir) dir)
       (   (and
               (=  (strcase (getenv "UserProfile"))
                   (strcase (substr dir 1 (setq pos (vl-string-position 92 dir nil t))))
               )
               (setq itm
                   (cdr
                       (assoc (substr (strcase dir t) (+ pos 2))
                          '(
                               ("my documents" . "Documents")
                               ("my pictures"  . "Pictures")
                               ("my videos"    . "Videos")
                               ("my music"     . "Music")
                           )
                       )
                   )
               )
               (vl-file-directory-p (setq itm (strcat (substr dir 1 pos) "\\" itm)))
           )
           itm
       )
       (   dir   )
   )
)

(defun LM:getfiles:sort ( lst )
   (apply 'append
       (mapcar 'LM:getfiles:sortlist
           (vl-sort
               (LM:getfiles:groupbyfunction lst
                   (lambda ( a b / x y )
                       (and
                           (setq x (vl-filename-extension a))
                           (setq y (vl-filename-extension b))
                           (= (strcase x) (strcase y))
                       )
                   )
               )
               (function
                   (lambda ( a b / x y )
                       (and
                           (setq x (vl-filename-extension (car a)))
                           (setq y (vl-filename-extension (car b)))
                           (< (strcase x) (strcase y))
                       )
                   )
               )
           )
       )
   )
)

(defun LM:getfiles:sortlist ( lst )
   (mapcar (function (lambda ( n ) (nth n lst)))
       (vl-sort-i (mapcar 'LM:getfiles:splitstring lst)
           (function
               (lambda ( a b / x y )
                   (while
                       (and
                           (setq x (car a))
                           (setq y (car b))
                           (= x y)
                       )
                       (setq a (cdr a)
                             b (cdr b)
                       )
                   )
                   (cond
                       (   (null x) b)
                       (   (null y) nil)
                       (   (and (numberp x) (numberp y)) (< x y))
                       (   (= "." x))
                       (   (numberp x))
                       (   (numberp y) nil)
                       (   (< x y))
                   )
               )
           )
       )
   )
)

(defun LM:getfiles:groupbyfunction ( lst fun / tmp1 tmp2 x1 )
   (if (setq x1 (car lst))
       (progn
           (foreach x2 (cdr lst)
               (if (fun x1 x2)
                   (setq tmp1 (cons x2 tmp1))
                   (setq tmp2 (cons x2 tmp2))
               )
           )
           (cons (cons x1 (reverse tmp1)) (LM:getfiles:groupbyfunction (reverse tmp2) fun))
       )
   )
)

(defun LM:getfiles:splitstring ( str )
   (
       (lambda ( l )
           (read
               (strcat "("
                   (vl-list->string
                       (apply 'append
                           (mapcar
                               (function
                                   (lambda ( a b c )
                                       (cond
                                           (   (= 92 b)
                                               (list 32 34 92 b 34 32)
                                           )
                                           (   (or (< 47 b 58)
                                                   (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                                                   (and (= 46 b) (< 47 a 58) (< 47 c 58))
                                               )
                                               (list b)
                                           )
                                           (   (list 32 34 b 34 32))
                                       )
                                   )
                               )
                               (cons nil l) l (append (cdr l) '(( )))
                           )
                       )
                   )
                   ")"
               )
           )
       )
       (vl-string->list (strcase str))
   )
)

(defun LM:getfiles:browseforfolder ( msg dir flg / err fld pth shl slf )
   (setq err
       (vl-catch-all-apply
           (function
               (lambda ( / app hwd )
                   (if (setq app (vlax-get-acad-object)
                             shl (vla-getinterfaceobject app "shell.application")
                             hwd (vl-catch-all-apply 'vla-get-hwnd (list app))
                             fld (vlax-invoke-method shl 'browseforfolder (if (vl-catch-all-error-p hwd) 0 hwd) msg flg dir)
                       )
                       (setq slf (vlax-get-property fld 'self)
                             pth (LM:getfiles:fixdir (vlax-get-property slf 'path))
                       )
                   )
               )
           )
       )
   )
   (if slf (vlax-release-object slf))
   (if fld (vlax-release-object fld))
   (if shl (vlax-release-object shl))
   (if (vl-catch-all-error-p err)
       (prompt (vl-catch-all-error-message err))
       pth
   )
)

(defun LM:getfiles:full->relative ( dir path / p q )
   (setq dir (vl-string-right-trim "\\" dir))
   (cond
       (   (and
               (setq p (vl-string-position 58  dir))
               (setq q (vl-string-position 58 path))
               (/= (strcase (substr dir 1 p)) (strcase (substr path 1 q)))
           )
           path
       )
       (   (and
               (setq p (vl-string-position 92  dir))
               (setq q (vl-string-position 92 path))
               (= (strcase (substr dir 1 p)) (strcase (substr path 1 q)))
           )
           (LM:getfiles:full->relative (substr dir (+ 2 p)) (substr path (+ 2 q)))
       )
       (   (and
               (setq q (vl-string-position 92 path))
               (= (strcase dir) (strcase (substr path 1 q)))
           )
           (strcat ".\\" (substr path (+ 2 q)))
       )
       (   (= "" dir)
           path
       )
       (   (setq p (vl-string-position 92 dir))
           (LM:getfiles:full->relative (substr dir (+ 2 p)) (strcat "..\\" path))
       )
       (   (LM:getfiles:full->relative "" (strcat "..\\" path)))
   )
)

(defun LM:getfiles:str->lst ( str del / pos )
   (if (setq pos (vl-string-search del str))
       (cons (substr str 1 pos) (LM:getfiles:str->lst (substr str (+ pos 1 (strlen del))) del))
       (list str)
   )
)

(defun LM:getfiles:updatefilelist ( dir ext lst )
   (LM:getfiles:listbox "box1" (LM:getfiles:listfiles dir ext lst))
)

(defun LM:getfiles:updateselected ( dir lst )
   (LM:getfiles:listbox "box2" (mapcar '(lambda ( x ) (LM:getfiles:full->relative dir x)) lst))
   lst
)

(defun LM:getfiles:updir ( dir )
   (substr dir 1 (vl-string-position 92 dir nil t))
)

(defun LM:getfiles:fixdir ( dir )
   (vl-string-right-trim "\\" (vl-string-translate "/" "\\" dir))
)

(defun LM:getfiles:removeitems ( itm lst / idx )
   (setq idx -1)
   (vl-remove-if '(lambda ( x ) (member (setq idx (1+ idx)) itm)) lst)
)

(vl-load-com)
(princ)
(defun mergetxt ( lst out / ds1 ds2 str )
   (if (setq ds1 (open out "w"))
       (progn
           (foreach txt lst
               (if (setq ds2 (open txt "r"))
                   (progn
                       (while (setq str (read-line ds2))
                           (write-line str ds1)
                       )
                       (close ds2)
                   )
               )
           )
           (close ds1)
           out
       )
   )
)

(defun c:test ( / lst out )
   (if 
       (and
           (setq lst (LM:getfiles "Select Text Files" nil "txt"))
           (setq out (getfiled "Output file" "" "txt" 1))
       )
       (mergetxt lst out)
   )
   (princ)
)

 

Thanks :D

Posted

jUst get as old as me COPY file1+file2 file3 just use STart CMD

 

I Hate a iPad never puts caps wher I want them

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...