|  |  | 
|  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | 
|  |  | 
|  | Exklusives EDU-Programm für RTX PRO Blackwell, eine Pressemitteilung 
 | 
| Autor | Thema:  "Solange bis...." (824 mal gelesen) | 
 | holgerka75 Mitglied
 
 
  
 
      Beiträge: 15Registriert: 19.03.2004
 |    erstellt am: 24. Mrz. 2004 14:56  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo, bei folgender Überlegung komme ich nicht weiter: User klickt einen Punkt an, die Punktnummer wird ausgelesen. Wenn die Punktnummer 7-stellig ist, lese die Koordinaten aus.(if (= T (wcmatch wertj "#######"))(setq ref2koo......))
 Nun das gleiche Spiel von vorne, nächster Punkt! Solange, bis der Punkt mit der 9-stelligen Nummer kommt! Dann mache ganz normal im Programm weiter. Also, solange der Punkt nur 7-stellig ist, soll er immer wieder die Koordinaten auslesen, und in eine (immer wieder neue)Variable schreiben. Wie realisiere ich dieses "Wiederholen der Funktion" (Damals in Basic war das "goto Zeile soundso" :-))
 GrußHolger
 Nun soll aber der User
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Brischke Moderator
 CAD on demand GmbH
 
         
 
  
 
      Beiträge: 4201Registriert: 17.05.2001
 AutoCAD 20XX, defun-tools (d-tools.eu) |    erstellt am: 24. Mrz. 2004 16:19  <-- editieren / zitieren -->    Unities abgeben:           Nur für holgerka75   | 
                        | marvin101010 Mitglied
 ingenieur der architektur ohne diplom, bauzeichner ohne lehre, cad-admin ohne wissen :-)
 
    
 
      Beiträge: 562Registriert: 22.01.2003
 Pentium 4Windows XP
 Autocad 2002
 Autocad 2002LT + Extender
 ADT 3.3
 ArchiCAD
 |    erstellt am: 24. Mrz. 2004 16:21  <-- editieren / zitieren -->    Unities abgeben:           Nur für holgerka75   | 
                        | spider_dd Mitglied
 
 
     
 
      Beiträge: 1163Registriert: 27.11.2003
 Win 10ProIntel(R) Core(TM) i7-7700
 NVIDIA Quadro P1000
 ACAD, Civil-3D 2018
 |    erstellt am: 24. Mrz. 2004 17:36  <-- editieren / zitieren -->    Unities abgeben:           Nur für holgerka75   
  Hallo Holger, schreiben in eine (immer wieder neue) Variable bei unbekannter Anzahl mach eich imme so: (setq zaehler 0)(while ...
 (setq zaehler (1+ zaehler))
 (setq variable (read (strcat "ref2koo" (itoa zaehler))))
 ...
 (set variable deine_aktuellen_punkt_koordinaten)
 ...
 )
 liefert eine folge von variablen mit den namen ref2koo1, ref2koo2, usw. die mit (setq variable (read (strcat "ref2koo" (itoa gewünschte_nummer))))
 (eval variable)
 wieder ausgelesen werden können.
 Viele Grüße spider Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Brischke Moderator
 CAD on demand GmbH
 
         
 
  
 
      Beiträge: 4201Registriert: 17.05.2001
 AutoCAD 20XX, defun-tools (d-tools.eu) |    erstellt am: 24. Mrz. 2004 18:15  <-- editieren / zitieren -->    Unities abgeben:           Nur für holgerka75   
  Hallo Holger, ähm .. Lisp ist hervorragend dazu geeignet mit Listen zu hantieren, deshalb würde ich dir empfehlen, die Listenbearbeitungsfunktionen mal anzuschauen. Ich programmiere schon eine Weile, habe auch selber bereits mit variablen Variablennamen 'gespielt' aber wirklich gebraucht habe ich dieses noch nicht. Mal ein paar Stichworte (Suchworte) für die Hilfe zum Suchen:cons - assoc - nth - mapcar - lambda - apply - append - reverse - vl-sort - ...
 Dein Konstrukt könnte dann wie folgt aussehen: Code:
 (while ...
 (setq erg (cons (setq zaehler(1+ zaehler))deine_aktuellen_punkt_koordinaten))
 ...
 (setq ergli (cons erg ergli))
 ...
 )
 
 
 Bei Fragen ... Grüße Holger ------------------Holger Brischke
 (defun - Lisp over night!
 AutoLISP-Programmierung für AutoCAD
 Da weiß man, wann man's hat!
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | holgerka75 Mitglied
 
 
  
 
      Beiträge: 15Registriert: 19.03.2004
 |    erstellt am: 25. Mrz. 2004 11:16  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo Leute, vielen Dank für Eure Antworten! Ich hab entschieden es mit der Listen-Methode (wie naheliegend) zu versuchen, mit append hats geklappt(setq iii T)
 (while (= iii T)
 .....
 (setq refkoo (append refkoo (list.....
 (setq iii (wcmatch wertj "#######"))
 Gruß und Danke Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                       
| 
  
 |  | 
 | mapcar Mitglied
 CADmin
 
 
  
 
      Beiträge: 1250Registriert: 20.05.2002
 Time flies like an arrow, fruit flies like a banana (Groucho Marx) |    erstellt am: 25. Mrz. 2004 12:11  <-- editieren / zitieren -->    Unities abgeben:           Nur für holgerka75   
  Holger, tu dir selbst den Gefallen und hör auf deinen Namensvetter: Nimm cons und nicht append. Wirf mal die Suche an, da wirst du eine sehr ausführliche Begründung finden. Aber immerhin verzichtest du auf die Idee, eine Invasion von globalen Variablen zu erzeugen. Da hat dein Namensvetter ebenfalls Recht, er formuliert das aber viel zu milde. Das ist nämlich ein ausgesprochen schlechter Ansatz, vor allem, wenn man die Technik nicht hat/beherrscht, um diese Variablen lokal zu machen, obwohl sie nicht 'oben hinterm Schrägstrich' stehen. Allein schon der Grund, dass man sich so den Arbeitsspeicher zumüllt bis zum Beenden von AutoCAD, sollte schon reichen. Und dass solche Programme in der Regel ab dem zweiten Durchlauf nicht mehr funktionieren, ist ein zweiter Grund, diese Idee ganz schnell in die Tonne zu treten. Also: cons statt append, und du bist auf der sicheren Seite;-) Gruß, Axel ------------------
   Meine AutoLisp-Seiten
 Meine private Homepage
 Mein Angriff auf dein Zwerchfell
 Mein Lexikon der Fotografie
 Mein gereimtes Gesülze
 Meine Überzeugung...
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |