;; ===================================================================== ;; ExportTextToCSV.lsp - eksport tekstow z jednej warstwy do pliku CSV ;; Polecenie: EXPORTTEXTTOCSV ;; AutoCAD / GstarCAD (AutoLISP). Opis i instalacja: ;; https://fixcontrol.pl/narzedzia/skrypty-autocad ;; ;; Kazdy tekst = jeden wiersz pliku. Formatowanie MTEXT jest usuwane, ;; podzialy wierszy zamieniane na spacje. ;; ===================================================================== ;; tresc MTEXT bez kodow formatowania; \P (nowy akapit) -> spacja (defun ExportTextToCSV-clean (txt / result i len ch nxt j) (setq result "" i 1 len (strlen txt)) (while (<= i len) (setq ch (substr txt i 1)) (cond ((= ch "\\") (setq nxt (substr txt (1+ i) 1)) (cond ((member nxt '("\\" "{" "}")) (setq result (strcat result nxt) i (+ i 2))) ((member nxt '("P" "~")) (setq result (strcat result " ") i (+ i 2))) ((member nxt '("L" "l" "O" "o" "K" "k" "N" "X")) (setq i (+ i 2))) ((= nxt "U") (setq result (strcat result (substr txt i 7)) i (+ i 7))) ((= nxt "S") (setq j (vl-string-search ";" txt i)) (if j (setq result (strcat result (vl-string-translate "^#" "//" (substr txt (+ i 2) (- j i 1)))) i (+ j 2)) (setq i (1+ len)))) (t (setq j (vl-string-search ";" txt i)) (if j (setq i (+ j 2)) (setq i (1+ len)))) ) ) ((or (= ch "{") (= ch "}")) (setq i (1+ i))) (t (setq result (strcat result ch) i (1+ i))) ) ) result ) (defun c:ExportTextToCSV ( / ss i obj txt lay refEnt fname file cnt) (vl-load-com) (setq refEnt (entsel "\nKliknij obiekt na warstwie, z ktorej chcesz teksty: ")) (if refEnt (progn (setq lay (vla-get-Layer (vlax-ename->vla-object (car refEnt)))) (prompt (strcat "\nWybrana warstwa: " lay)) (prompt "\nZaznacz obszar z tekstami: ") (setq ss (ssget '((0 . "TEXT,MTEXT")))) (if ss (progn (setq fname (getfiled "Wybierz plik do zapisu CSV" "tekst.csv" "csv" 1)) (if fname (progn (setq file (open fname "w")) (setq i 0 cnt 0) (while (< i (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss i))) (if (= (strcase (vla-get-Layer obj)) (strcase lay)) (progn (setq txt (vla-get-TextString obj)) (if (= (vla-get-ObjectName obj) "AcDbMText") (setq txt (ExportTextToCSV-clean txt)) ) (write-line txt file) (setq cnt (1+ cnt)) ) ) (setq i (1+ i)) ) (close file) (prompt (strcat "\nZapisano " (itoa cnt) " tekstow do pliku: " fname)) ) ) ) (prompt "\nNie wybrano obiektow.") ) ) (prompt "\nNie wybrano obiektu referencyjnego.") ) (princ) ) (princ "\nEXPORTTEXTTOCSV loaded. Type EXPORTTEXTTOCSV to run.") (princ)