Hallo Forum,
ich brauche eure Hilfe hab mich Gedanklich irgend wie festgefahren.
Mein Problem, ich möchte eine Liste mit vl-sort sortieren lassen.
Sortiert werden sollen Positionsnummer in Aufsteigender Reihenfolge, zu diesem Zweck fülle ich ein Feld mit vorangestellten Leerzeichen auf. Die Sortierung klappt prima.
Nun muste ich aber an verschiedene Positionsnummern einen Anhang anfügen in Form von ".000", ".010", ".020" usw. dabei verschiebt sich allerdings die Sortierung wie es mir nicht gefällt. Der Angang ist immer 4-Stellig ich müßte also nach einem "." suchen der als Trennzeichen vorhanden ist, ist kein "." vorhanden sollen " " (4 Leerzeichen angefügt werden und das krieg ich nicht hin.
In der Folgenden Liste wird so Sortiert 10, 20, 30, 40, 50, 60, 70, 80, 100, 90.000, 90.010 ..... ich möchte aber die "100" hinter "90...." haben.
Die Liste die Sortiert werden soll:
(("ID" "KATALOG" "TYP" "ART_NR" "VKZ" "MENGE" "EINHEIT" "BRUTTO_PREIS" "IDD" "EXTERN" "MERKER" "POSITION" "ZUSCHLAG_VON" "ZUSCHLAG_BIS") ("101-302037" "HAG" "" "ACA916D" "0" "1.000" "" "" 35858 "1" " " "10" "" "") ("101-302037" "BUD" "" "31015030" "0" "1.000" "" "" 35859 "1" " " "20" "" "") ("101-302037" "HÄF" "" "10043004" "0" "1.000" "" "" 35860 "1" " " "30" "" "") ("101-302037" "EIG" "" "l0" "0" "1.000" "" "" 35863 "1" "" "40" "" "") ("101-302037" "WAL" "v" "W113093" "0" "1.000" nil nil 36870 "1" nil "50" nil nil) ("101-302037" "WAL" "v" "W113093" "0" "1.000" nil nil 36871 "1" nil "60" nil nil) ("101-302037" "HAG" "" "ACA916D" "0" "1.000" nil nil 36905 "1" nil "70" nil nil) ("101-302037" "HAG" "" "ACA916D" "0" "1.000" nil nil 37310 "1" nil "80" nil nil) ("101-302037" "HAG" "" "ACA916D" "0" "1.000" nil nil 37311 "1" nil "100" nil nil) ("101-302037" "WAL" "z" "gi011011110" "0" "1.000" nil nil 36895 "1" nil "90.000" nil nil) ("101-302037" "WAL" "v" "W212851" "0" "1.000" nil nil 36896 "1" nil "90.010" nil nil) ("101-302037" "WAL" "v" "W301341" "0" "1.000" nil nil 36897 "1" nil "90.020" nil nil) ("101-302037" "WAL" "v" "W301319" "0" "1.000" nil nil 36898 "1" nil "90.030" nil nil) ("101-302037" "WAL" "v" "W203119" "0" "1.000" nil nil 36899 "1" nil "90.040" nil nil) ("101-302037" "WAL" "v" "W203092" "0" "1.000" nil nil 36900 "1" nil "90.050" nil nil) ("101-302037" "WAL" "v" "W203093" "0" "1.000" nil nil 36901 "1" nil "90.060" nil nil) ("101-302037" "WAL" "v" "W130238" "0" "5.000" nil nil 36902 "1" nil "90.070" nil nil) ("101-302037" "WAL" "v" "W127366" "0" "3.000" nil nil 36903 "1" nil "90.080" nil nil) ("101-302037" "WAL" "" "Zuschlag" "0" "55.000" nil nil 36904 "1" nil "90.090" nil nil))
Die Füllfunktion:
(defun FUELL10 (FELDL)
(substr " " 1 (- 10 FELDL))
;1234567890
)
Die Sortierfunktion:
(defun ST_SORT (STUECK_LISTE / ST_ANFANG ST_POSITION ST_ENDE)
(setq ST_ANFANG (car STUECK_LISTE));die 1.Liste vom STUECK_RESULT speichern mit den Feldnamen
(setq ST_ENDE (cdr STUECK_LISTE));den Rest vom STUECK_RESULT speichern
(setq ST_POSITION (vl-position "POSITION" (nth 0 STUECK_RESULT)))
(setq ST_ENDE (vl-sort ST_ENDE '(lambda (S1 S2)(< (strcat (FUELL10 (strlen (nth ST_POSITION S1)))(nth ST_POSITION S1))
(strcat (FUELL10 (strlen (nth ST_POSITION S2)))(nth ST_POSITION S2))))))
(setq STUECK_RESULT (append (list ST_ANFANG) ST_ENDE))
);ende defun ST_SORT
Wer kann mir weiter Helfen
Grüße
Niggemann
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP