Code:
(defun c:testfunction ()(setq temp (ExtractPartofFilename))
(princ "Type der Variable nach testfunction:\n")
(princ (type temp))
(princ "\n")
(princ temp)
(princ "\n")
;(command "._attedit" "_N" "_N" "Testblock" AttrTag "*" CurAttrValue NewAttrValue)
;(setvar "CMDECHO" 1)
(princ)
)
(defun ExtractPartofFilename (/ tz dwgname test counter finalstring)
(setq tz "/")
(setq dwgname (substr (getvar "dwgname") 1 (- (strlen(getvar "dwgname")) 4)))
(setq test (split_string dwgname "-"))
(setq test (cddr test))
(setq test (subst (car (split_string (last test) "_")) (last test) test))
(setq finalstring (strcat tz (car test)))
(setq counter 1)
(while (< counter (length test))
(setq finalstring (strcat finalstring tz (nth counter test)))
(setq counter (+ counter 1))
);while
(princ "Type der Variable nach ExtractPartofFilename:\n")
(princ (type finalstring))
(princ "\n")
(princ finalstring)
; (princ (type finalstring))
(princ) ;clean exit
);end of defun
(defun split_string (target delimeter / )
;; Get the length of the target string. We will need this for the loop below.
(setq target_length (strlen target))
;; Set-up the loop.
(setq counter 1) ;; Counter used to access the correct character in the string.
(setq first_char_parsed 0) ;; Boolean flag to determine if we have already parsed the first character in the string
;; or the first character after a delimeter.
(setq first_string_made 0);; Boolean flag to determine if we have already separated the first substring from the target.
(repeat target_length
(setq current_char (substr target counter 1))
(if (not (= current_char delimeter))
;; The character was not the delimeter.
(progn
;; If this was the first character we need to set up a new string.
(if (= first_char_parsed 0)
;; This was the first character. Make a new string. Set first_char to 1.
(progn
(setq current_string current_char)
(setq first_char_parsed 1)
);; end progn
;; This was not the first character. Append the current character to the existing string.
(setq current_string (strcat current_string current_char))
);; end if
);; end progn
;; The character was the delimeter.
(progn
;; if the delimeter is the first character encountered, ignore it.
(if (= first_char_parsed 0)
;; We just parsed the first character.
(setq first_char_parsed 0)
;; We did not just parse the first character. So we need to add the current string to our list of strings. Then set first_char to 0.
(progn
;; If this is the first substring we separated, we need to create a new list.
(if (= first_string_made 0)
;; This is the first substring. Create the list and set the first_string flag to 1.
(progn
(setq to_return (list current_string))
(setq first_string_made 1)
(setq first_char_parsed 0)
)
;; This is not the first substring. Append the current string to the list that is already been created.
(progn
(setq to_return (append to_return (list current_string)))
;; Now reset the first_char flag so we start building a new string.
(setq first_char_parsed 0)
)
);; end if
);; end progn
);; end if
);; end progn
);; end if
;; If the character is the last character in the target string, we need to add the current string to the list. This code
;; is needed because most strings aren't terminated by the delimeter.
(if (= counter target_length)
;; We want to ignore the last character if it is the delimeter.
(if (not (= current_char delimeter))
(setq to_return (append to_return (list current_string)))
)
);; end if
;; Increment the counter.
(setq counter (+ counter 1))
);; end repeat
(setq to_return to_return)
);; end defun