Opis.

 

 

 

Polecenie do uruchomienia skryptu LISP: Sort

 

Kod źródłowy z opisem

 

;;; Sortowanie list względem różnych kolumn
;;; zwcad.pl
;;; Polecenie do uruchomienia skryptu LISP: Sort
;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/178-sortowanie-list-wzgledem-roznych-kolumn.html
(vl-load-com) 
; Przykładowe dane do testowania
(setq Dane (list (list 2 "Grzegorz" "Brzęczyszczykiewicz" "Chrząszczyrzewoszyce")
(list 1 "Józef" "Szwejk" "Praga")
(list 3 "Władysław" "Kargul" "Krużewniki" )
(list 0 "Kazimierz" "Pawlak" "Krużewniki" )
(list 5 "Jan" "Kania" "Kraków")
(list 4 "Moryc" "Haber" "Wiedeń" )
(list 6 "Hudej" "ich weiss nicht" "Praga")
))
(defun C:Sort ( / resp Sorted )
;----------------------------------------------------------
; funkcja sortuje elementy dwópoziomowej listy względem kryterium wybranego przez Użytkownika
; Argumenty: Dane: Lista list zawierających wartości liczbowe i tekstowe
; Wynik: nil
;----------------------------------------------------------
(setq resp(GetOption "Numer Imię nAzwisko Miejsce" (strcat "\n" "Wybierz kryterium" ":Numer/Imię/nAzwisko/Miejsce:") )) ; Wybór kryterium sortowania
(setq resp(cond ((= resp "NUMER") 0)((= resp "IMIĘ") 1)((= resp "NAZWISKO") 2) ((= resp "MIEJSCE") 3)))
(setq Sorted(vl-sort Dane '(lambda (%1 %2)(< (nth resp %1) (nth resp %2) ) ) ) )
(LISTprint Sorted )
nil
)
(defun LISTprint (Lista / %)
;----------------------------------------------------------
; funkcja wyświetla listę wiersz po wierszu
; Argumenty: Lista list zawierających wartości liczbowe i tekstowe
; Wynik: nil
;----------------------------------------------------------
(print Lista )
(foreach % Lista
(print % )
)
)
(defun GetOption (InitStr KWordStr / Wynik ans )
(setq Wynik nil)
(initget 1 InitStr )
(setq ans(vl-catch-all-apply 'getkword (list KWordStr )))
(if (not(vl-catch-all-error-p ans))
(progn
(if ans (progn
(setq Wynik (strcase ans))
))
)
)
Wynik
)
br /

 

Wykonanie w ZWCAD 2023