I am trying to make this: L:\Engineering\0208037\SURVEY\DRAWINGS turn into this: L:\Engineering\0208037\DRAWINGS
I am using the dwgprefix and it returns the first string and i want to make it in the second string as a new variable or replace the old variable so i can use it in a save as routine i am working on.
The problem is sometimes them project number (0208037) will be longer or shorter so i can't use the substr command
2012 all sp's.
and thanks to you all.
The VL-string... commands should give you everything that you need to accomplish this.. Check them out in the Developer Help VisualLISP reference. They're very useful when working with strings. Just remember (vl-load-com). If you need further help I'll come up with something when I get a chance.
Saveapath original value: "L:\\Engineering\\0208037\\SURVEY\\DRAWINGS"
via
(setq savepath (strcat (getvar "dwgprefix") (getvar "dwgname")))
Savepath new value: "L:\\Engineering\\0208037\\DRAWINGS"
via
(setq savepath (strcat (substr savepath 1 (vl-string-search "SURVEY" savepath)) (substr savepath (+ (vl-string-search "SURVEY" savepath) 8))))
@ThomasGlidewell wrote:I am trying to make this: L:\Engineering\0208037\SURVEY\DRAWINGS turn into this: L:\Engineering\0208037\DRAWINGS
I am using the dwgprefix and it returns the first string and i want to make it in the second string as a new variable or replace the old variable so i can use it in a save as routine i am working on.
The problem is sometimes them project number (0208037) will be longer or shorter so i can't use the substr command
2012 all sp's.
and thanks to you all.
We could have easily use Vl-REMOVE, but in case you had a folder with the same name along the filepath like this
"L:\\CAD\\Projects\\2012\\Project CodeXXX\\CAD\\"
the vl-remove function tends to remove duplicates,
same goes with vl-string-search method
(vl-string-search "CAD" "L:\\CAD\\Projects\\2012\\Project CodeXXX\\CAD\\") 3
If the variable was indeed from DWGPREFIX system variable (which includes "\\" at the end, unlike your example string)
So using a list and a number instead of a string name representing the position of the folder name:
(defun rempath (str num / pref v p f str rp i pathlist) (setq pref (substr str 1 3)) (while (and (setq v (vl-string-position 92 str)) (setq f (vl-string-position 92 (substr str (setq v (+ 2 v)))))) (setq p (cons (substr str v (1+ f)) p) str (substr str v)) ) (setq rp (nth num (setq pathlist (cons pref (reverse p)))) i -1) (apply 'strcat (vl-remove-if '(lambda (j) (setq i (1+ i)) (and (equal j rp) (= i num) )) pathlist) ) )
(getvar 'dwgprefix)
"L:\\Engineering\\0208037\\SURVEY\\DRAWINGS\\"
(REMPATH (getvar 'dwgprefix) 3);<--- 3rd folder
"L:\\Engineering\\0208037\\DRAWINGS\\"
(REMPATH (getvar 'dwgprefix) 2);<--- 2nd folder
"L:\\Engineering\\SURVEY\\DRAWINGS\\"
HTH
@Ian_Bryant wrote:
You could try
(vl-string-subst "" "\\SURVEY" (getvar "dwgprefix"))
Ian
What if:
(vl-string-subst "" "\\CAD" "L:\\CAD\\Projects\\2012\\Project CodeXXX\\CAD\\Current")
"L:\\Projects\\2012\\Project CodeXXX\\CAD\\Current"
Thats why i posted a generic sub.
No string name, sequence dependent:
But thats just me