So, I have a list of numbers that I would like to convert to strings, Examples would be:
(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23)
would Return: 1-23
(1 2 3 4 5 6 11 13 14 15 16 17 18 19 20 21 22 23)
would Return: 1-6, 11, 13-23
(1 3 5 6)
would Return: 1, 3, 5, 6
I am sure I am missing something obvious in my code below, as all I am presently getting returned is the number 1, can someone please help me out?
And massive kudos if you can reverse the process, say someone enters 1-6, 11, 13-23 it would then return the list of numbers (1 2 3 4 5 6 11 13 14 15 16 17 18 19 20 21 22 23)
(defun PageNumbers->String (PageNumberList / Num str LowNumber HighNumber LastNumber Difference PartialStr)
;Returns string representing page numbers in list
(setq LowNumber (car PageNumberList)
LastNumber LowNumber
str (rtos LowNumber 2 0)
)
(foreach Num (cdr PageNumberList)
(if (or (= LowNumber nil) (= LastNumber nil))
(progn
(setq LowNumber Num
LastNumber LowNumber
)
)
)
(setq Difference (- Num LastNumber)
LastNumber Num
);setq
(if (< Difference 0)
(setq Difference (* Difference -1))
);if
(if (<= Difference 1)
(progn
(setq HighNumber Num
LastNumber HighNumber
)
)
(progn
(if (not HighNumber)
(progn
(if (not str)
(setq str (strcat (rtos LowNumber 2 0)))
(setq str (strcat str ", " (rtos LowNumber 2 0)))
)
(setq LowNumber Num
LastNumber LowNumber
)
)
(progn
(if (not str)
(setq str (strcat (rtos HighNumber 2 0)))
(setq str (strcat str "-" (rtos HighNumber 2 0)))
)
(setq LowNumber nil
HighNumber nil
LastNumber nil
)
)
)
)
);if
)
str
)