Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Brauche Hilfe

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Brauche Hilfe (492 mal gelesen)
Niggemann
Mitglied



Sehen Sie sich das Profil von Niggemann an!   Senden Sie eine Private Message an Niggemann  Schreiben Sie einen Gästebucheintrag für Niggemann

Beiträge: 159
Registriert: 31.10.2003

Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010

erstellt am: 05. Okt. 2007 00:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



Sehen Sie sich das Profil von CAD-Huebner an!   Senden Sie eine Private Message an CAD-Huebner  Schreiben Sie einen Gästebucheintrag für CAD-Huebner

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 05. Okt. 2007 01:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Niggemann 10 Unities + Antwort hilfreich

Anstatt Zeichenketten zu sortieren würde ich die numerischen Werte vergleichen.
Dazu einfach die Zeichenkette vorher mit ATOF umwandeln.
Un noch eine Bitte - nächsten Mal bitte eine aussagekräftige Betreffzeile! "Brauche Hilfe" ist wirklich die denkbar schlechteste Betreffzeile (das war nun schon dein 76 Beitrag, da sollte man das wissen!)

Hier mal die überarbeitete Funktion:

Code:
(defun ST_SORT (STUECK_LISTE / ST_POSITION)
  ; die 1. Liste vom STUECK_LISTE enthält die Feldnamen
  (setq ST_POSITION (vl-position "POSITION" (car STUECK_LISTE)))
  (cons (car STUECK_LISTE)
        (vl-sort (cdr STUECK_LISTE)
                '(lambda (S1 S2)
                    (< (atof (nth ST_POSITION S1))
                      (atof (nth ST_POSITION S2))
                    )
                  )
        )
  )
)

------------------
Mit freundlichem Gruß

Udo Hübner

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niggemann
Mitglied



Sehen Sie sich das Profil von Niggemann an!   Senden Sie eine Private Message an Niggemann  Schreiben Sie einen Gästebucheintrag für Niggemann

Beiträge: 159
Registriert: 31.10.2003

Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010

erstellt am: 05. Okt. 2007 14:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für deine Überarbeitung das war genau was ich brauchte.
Deinen Mecker habe ich zur Kenntnis genommen und stimme dir vollkommen zu,
nur manchmal hat man eben den Kopf mit andern Dingen einfach zu.
Werde mich bessern.
Trotzdem vielen Dank
Grüße
Niggemann

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz