Community
AutoCAD Produktfamilie - Deutsch
Das Forum für alle Fragen zu AutoCAD, LT, Architecture, Electrical, Map 3D, Mechanical, MEP, Plant 3D, Raster Design, Web App, sowie Autodesk Civil 3D und Advance Steel.
abbrechen
Suchergebnisse werden angezeigt für 
Anzeigen  nur  | Stattdessen suchen nach 
Meintest du: 

Lisp letzer Wert einer Variablen anbieten

4 ANTWORTEN 4
GELÖST
Antworten
Nachricht 1 von 5
ursdardel
404 Aufrufe, 4 Antworten

Lisp letzer Wert einer Variablen anbieten

Ich bin LISP-Neuling und habe folgendes Problem.

Ich möchte bei der Eingabe eines Pfades den letzten Wert anbieten. "alterpfad" ist die variable wo die letzte Eingabe gespeichert würde.

Darum habe ich folgende Zeile in der ein Fehler ist:

(setq Pfad (getstring t strcat"Bitte Pfad eingeben<"alterpfad">:"))

Was ist hier falsch?

Gibt es ev. ein LISP-Schnipsel zum Thema letzer Wert anbieten?

4 ANTWORTEN 4
Nachricht 2 von 5
m_latz
als Antwort auf: ursdardel

So wäre es von der Syntax her korrekt:

 

(setq Pfad (getstring t (strcat "Bitte Pfad eingeben<" alterpfad ">:")))

 

Aber ich bin mir nicht sicher, ob das programmtechnisch so gewollt ist, da in der Variable nichts drin steht, wenn man einfach mit "return" bestätigt. Da muß man dann noch drauf reagieren.

 

Gruß

 

Markus

 

 

Nachricht 3 von 5
ursdardel
als Antwort auf: m_latz

Danke für die Antwort.

Der ganze Prozess würde etwa so aussehen:


(setq alterpfad (if alterpfad nil "C:/temp/SFM/passpunkte/")alterpfad)
(setq spfad (getstring (strcat "Bitte Pfad eingeben <"alterpfad">:")))
(setq spfad (if spfad nil alterpfad)spfad)

Die Rückmeldung ist: Zu wenig Argumente in Setq.

 

Ich habe irgendwas nicht begriffen mit if/then

 

Nachricht 4 von 5
cadffm
als Antwort auf: ursdardel

Hi und

Ja, die Basics, der Syntax. 

Sitzt dieser dann verringert es den  Frustlevel da du aktuell über jeder Zeile stolperst.

 

(If <dashier> <MACHDAS> <optional: wenn nicht, dann DASHIER>)

 

<und auch Ja, ich kenne das auch noch - wie der Großteil der als CAD Anwender dazu kommt und nicht als Programmierer).

 

Die Meldung ist eindeutig, eine Funktion erwartet mehr Argumente/Parameter wie du übergibst.

 

Mal sehen:

(setq

alterpfad

(if alterpfad

nil

"C:/temp/SFM/passpunkte/"

);if-ende

>>du setzt alterpfad auf nil falls alterpfad einen Wert hat.

 

 

alterpfad << hier weist du alterpfad wieder einen neuen Wert zu

<<<hier fehlt der Wert, daher die Fehlermeldung

);setq-ende

 


(setq spfad

(getstring

(strcat "Bitte Pfad eingeben <"alterpfad">:")

);getstring-ende

>> Würde Sinn ergeben wenn alterpfad zuvor gesetzt würde - gut

);setq-spfad-ende


(setq spfad

>>warum schon wieder spad überschreiben?

(if spfad

>> spfad ist auf jeden Fall wahr, weil gestring immer eine  String zurück gibt! Damit ist das Konstrukt quatsch.

Teste es mal in deiner Befehlszeile:

Befehl: (getstring "Test: )

Drücke enter, was ist das Ergebnis? ""

Also war (ein String mit Länge 0)

 

nil

>>hier setzt du spfad wieder auf nil

alterpfad

>> wird nie der Fall sein

 

);if-spfad-ende

 

Spfad >> hier würde spfad wieder ein neuer Wert zugewiesen werden

>>>hier fehlt der neue Wert wieder

)

 

Im technischen Sinn hakt also mehr an SETQ, zumindest aus ACADs Sicht.

Ich (Mensch) verstehe es jedoch - es liegt bei der Verwendung von IF.

 

Korrekturvorschlag, nicht zum 1:1 übernehmen, dafür übersichtlicher.

 

(or alterpfad (setq alterpfad "C:/Meinpfad/")

Entweder es gibt ihn schon, oder ich setze einen.

 

(setq spfad (getstring t (strcat "meintext" alterpfad)))

Spfad setzen

 

(If (= spfad "") 

Wenn spfad = "" ist

(setq spfad alterpfad)

Spfad auf alterpfad setzen

 

(setq alterpfad spfad)

Wenn spfad nicht "" ist, alterpfad auf spfad setzen

);if-ende

 

Hoffe das klappt so, am Smartphone hat man keine  Überblick..

 

Was du schreiben wolltest sieht so aus:

(If (not alterpfad) machdas andernfallsdas)

oder 

(if (= nil alterpfad) machdas oderdas)

 

Da aber alles was nicht nil automatisch wahr ist, habe ich mich am Anfang for OR entschieden

(or alterpfad (setq alterpfad 123))

denn "auf nil prüfen" mit if sieht nie elegant aus - auch wenn man es machen kann.

Sebastian

EESignature

Nachricht 5 von 5
ursdardel
als Antwort auf: cadffm

Vielen Dank für deine ausführliche Hilfe. Ich schäme mich ja auch für mein extrem lückenhaften LISP-Kenntnisse. Ich habe mir auch wirklich fest vorgenommen das Kochbuch durchzuarbeiten, aber dann habe ich immer wieder Ideen, die meinen Arbeitsalltag so viel einfacher machen und ich fange wieder an mir die Zeilen in den Foren zusammenzusuchen.

Schön das ihr mir trotzdem weiterhelft.

Sie finden nicht, was Sie suchen? Fragen Sie die Community oder teilen Sie Ihr Wissen mit anderen.

In Foren veröffentlichen  

Autodesk Design & Make Report