### Author Topic: Search of Windows type Sort function  (Read 10540 times)

0 Members and 1 Guest are viewing this topic. ##### Re: Search of Windows type Sort function
« Reply #30 on: April 29, 2019, 06:03:46 PM »
I'm sure this logic is flawed and horribly inefficient but it's the first thing that came to mind Add ("B.10" 66.73 "Regular") to your list DOH! That's some strange numbering since "A.05" is formatted correctly.

I agree - if leading zeroes could be guaranteed, this task would be significantly easier... #### rayakmal

• Newt
• Posts: 30 ##### Re: Search of Windows type Sort function
« Reply #31 on: April 29, 2019, 09:56:29 PM »

Consider the following function based on the code from my earlier post -
Code - Auto/Visual Lisp: [Select]
1. (defun mysort ( l )
2.     (vl-sort l
3.             (lambda ( a b / x y )
4.                 (if (= (car  a) (car  b))
6.                         (setq a (LM:splitstring (car a))
7.                               b (LM:splitstring (car b))
8.                         )
9.                             (and
10.                                 (setq x (car a))
11.                                 (setq y (car b))
12.                                 (= x y)
13.                             )
14.                             (setq a (cdr a)
15.                                   b (cdr b)
16.                             )
17.                         )
18.                         (cond
19.                             (   (null x) b)
20.                             (   (null y) nil)
21.                             (   (and (numberp x) (numberp y)) (< x y))
22.                             (   (numberp x))
23.                             (   (numberp y) nil)
24.                             (   (< x y))
25.                         )
26.                     )
27.                 )
28.             )
29.         )
30.     )
31. )
32.
33. ;; Split String  -  Lee Mac
34. ;; Splits a string into a list of text and numbers
35.
36. (defun LM:splitstring ( str )
37.     (
38.         (lambda ( l )
40.                 (strcat "("
41.                     (vl-list->string
42.                                     (lambda ( a b c )
43.                                         (cond
44.                                             (   (= 92 b)
45.                                                 (list 32 34 92 b 34 32)
46.                                             )
47.                                             (   (or (< 47 b 58)
48.                                                     (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
49.                                                     (and (= 46 b) (< 47 a 58) (< 47 c 58))
50.                                                 )
51.                                                 (list b)
52.                                             )
53.                                             (   (list 32 34 b 34 32))
54.                                         )
55.                                     )
56.                                 )
57.                                 (cons nil l) l (append (cdr l) '(( )))
58.                             )
59.                         )
60.                     )
61.                     ")"
62.                 )
63.             )
64.         )
65.         (vl-string->list str)
66.     )
67. )

Example:
Code - Auto/Visual Lisp: [Select]
1. _\$ (mysort '(("A.05" 12.34 "Regular") ("A.10" 34.54 "BigSize") ("B.9" 66.73 "Regular") ("A.10" 12.12 "BigSize") ("A.05" 12.55 "BigSize")))
2. (("A.05" 12.34 "Regular") ("A.05" 12.55 "BigSize") ("A.10" 12.12 "BigSize") ("A.10" 34.54 "BigSize") ("B.9" 66.73 "Regular"))

Wow   That's what I want, Lee.
Once again, Thanks.  I really appreciate your help.

Ron, Thanks for chiming in. ##### Re: Search of Windows type Sort function
« Reply #32 on: May 01, 2019, 01:58:25 PM »
You're welcome! 