Vytisknout stránku | Zavřít okno

cond

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=8224
Datum vytištění: 13.čer.2026 v 10:02


Téma: cond
Odeslal: Ferdinand
Předmět: cond
Datum odeslání: 05.bře.2009 v 14:20
Funkce funguje takto:
(cond
(podminka1) (akce1)
(podminka2) (akce2)
...
)
 
Řetězce VADNO, VAREV, VASTR, DWG, LN byly v předchozím oddílu nadefinováva resp. získána a přesto ze sekce
(cond
  (and (= VADNO nil) (= VAREV nil) (/= VASTR nil))
  (setq NNR (strcat DWG "#" LN "_" VASTR))
  (and (= VADNO nil) (/= VAREV nil) (= VASTR nil))
  (setq NNR (strcat DWG "#" LN "_" VAREV))
  (and (= VADNO nil) (/= VAREV nil) (/= VASTR nil))
  (setq NNR (strcat DWG "#" LN "_" VAREV "_" VASTR))
  (and (= VADNO nil) (= VAREV nil) (= VASTR nil))
  (setq NNR (strcat DWG "#" LN))
  (and (/= VADNO nil) (/= VAREV nil) (= VASTR nil))
  (setq NNR (strcat VADNO "_" VAREV))
  (and (/= VADNO nil) (= VAREV nil) (/= VASTR nil))
  (setq NNR (strcat VADNO "_" VASTR))
  (and (/= VADNO nil) (/= VAREV nil) (/= VASTR nil))
  (setq NNR (strcat VADNO "_" VAREV "_" VASTR))
)
 
mi to vrací T a !NNR je nil . Když jsem to zkoušel po řádcích např.
(cond
  (and (/= VADNO nil) (/= VAREV nil) (/= VASTR nil))
  (setq NNR (strcat VADNO "_" VAREV "_" VASTR))
)
tak to taky vrací jen T a !NNR jako nil . Když to zadám jako podmínku
(if
  (and (/= VADNO nil) (/= VAREV nil) (/= VASTR nil))
  (setq NNR (strcat VADNO "_" VAREV "_" VASTR))
)
tak to vrátí odpovídající seskládaný řetězec. To nelze použít v cond logické funkce?


-------------
-FerTh-



Odpovědi:
Odeslal: Vladimír Michl
Datum odeslání: 05.bře.2009 v 15:27
Máte tam nějak divně závorky (a nil = false) - zkusil bych spíš:
 

(cond
 ( (and (not VADNO)(not VAREV) VASTR) (setq NNR "xxxx"))
...
)


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Ferdinand
Datum odeslání: 06.bře.2009 v 10:33
Lze použít hvězdičkovou konvenci? Myslím něco jako
cond
((= NFOR "A4*") (setq FORMAT "A4 (210.00 x 297.00 MM)")
...
)
Pokud to napíšu v této podobě, tak mi to vyhodnotí jako nil. Chci aby to platilo pro NFOR=("A4" anebo "A4-1" anebo "A4_ru" anebo "A4#L" anebo "A4 ISO").
ED: Aha, takže to má fungovat takhle
(cond
((podminka1) (akce1))
...
)


-------------
-FerTh-


Odeslal: pavelstyl
Datum odeslání: 06.bře.2009 v 10:36
Původně odeslal(a) Ferdinand Ferdinand napsal(a):

Lze použít hvězdičkovou konvenci? Myslím něco jako
cond
((= NFOR "A4*") (setq FORMAT "A4 (210.00 x 297.00 MM)")
...
)
Pokud to napíšu v této podobě, tak mi to vyhodnotí jako nil. Chci aby to platilo pro NFOR=("A4" anebo "A4-1" anebo "A4_ru" anebo "A4#L" anebo "A4 ISO").
 
 
A co příkaz (wcmatch). Ten by to měl umět.
Pavel Štyl


Odeslal: Sedláček
Datum odeslání: 06.bře.2009 v 10:49

Nebo použít SUBSTR pro práci s řetězci.

Pak něco jako: (nezkoušeno)
 
cond
((= NFOR "A4*") (setq FORMAT (substr "A4 (210.00 x 297.00 MM)" 1 2))


Odeslal: Ferdinand
Datum odeslání: 06.bře.2009 v 11:16
Původně odeslal(a) pavelstyl pavelstyl napsal(a):

 
A co příkaz (wcmatch). Ten by to měl umět.
Pavel Štyl
Děkuji.
Gratuluji k tomuhle 100. příspěvku!


-------------
-FerTh-


Odeslal: Ferdinand
Datum odeslání: 06.bře.2009 v 12:38
Lze kombinovat dohromady "=" a "wcmatch" ? To pro konkrétní případ, když je NFOR čistě jenom "A3" a pak může být ještě "A31_ru" anebo "A31_en" anebo "A31_cz" . Takhle mi to nechce brát (vrací nil):
(cond
((or (= NFOR "A3")(wcmatch NFOR "A31_*")) (setq FORMAT...
...
)


-------------
-FerTh-


Odeslal: Vladimír Michl
Datum odeslání: 06.bře.2009 v 13:34
Lze, ale stačí to napsat do jednoho wcmatch:
 
(wcmatch NFOR "A3,A31_??")


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Ferdinand
Datum odeslání: 09.bře.2009 v 08:44
To je elegantní. Děkuji za osvětlení.
Ještě jsem se chtěl pro jistotu zeptat: * (hvězdičku) u wcmatch nelze použít?


-------------
-FerTh-


Odeslal: Vladimír Michl
Datum odeslání: 09.bře.2009 v 11:17
Lze.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Ferdinand
Datum odeslání: 09.čvc.2009 v 15:03
Došel jsem k dalšímu problému:
Budu chtít zjistit konkrétní hodnotu (ani jeden z nich nesmí být nil) pro 3 prom. takhle:
V1...má být řetězec který začíná na "3UCZ"
V2....má být nenulové celé číslo větší než 0
V3....má být = 1
tak podmínku zapíšu ve tvaru
(cond
  (and (= V1 "3UCZ*") (= V2 ???) (= V3 1))
  (setq NNR (strcat V1 "_" V2 "_" V3))
)
...ale jak tam zakomponovat tu podmínku pro V2 ?


-------------
-FerTh-


Odeslal: Martin Bielina
Datum odeslání: 09.čvc.2009 v 16:27
A co třeba takhle:

...
(cond  (and (= V1 "3UCZ*") (> V2 0) (= V2 (fix V2)) (= V3 1))  (setq NNR (strcat V1 "_" V2 "_" V3)))
...



Odeslal: Ferdinand
Datum odeslání: 10.čvc.2009 v 13:20
Martine, děkuji, tu formu s tím fix jsem neznal (nebo nejspíš zapomněl...). Pokud chci zjistit všeobecně hodnotu nějaké proměnné, tak lze nějak rozpoznat jestli je to INTEGER, REAL, STRING či dokonce LIST ? Dle uvedeného vyvozuji, že fix je pro INTEGER. Ve vlastnostech u klíče 0 je to totiž vždy jen "text" anebo "attrib" . Jde mi o ten způsob zápisu do podmínky cons .

-------------
-FerTh-


Odeslal: alfred
Datum odeslání: 10.čvc.2009 v 13:30
(type item)


Odeslal: Ferdinand
Datum odeslání: 10.čvc.2009 v 14:14
Takže podmínku
"pokud je v proměnné PP1 obsažena hodnota typu INTEGER, proveď AKCE1, pokud je typu REAL, proveď AKCE2, pokud je typu STRING, proveď AKCE3, pokud je typu LIST, proveď AKCE4"
napíšu jako
(cond
((type item (= PP1 (fix PP1)))
(AKCE1))
((type item (= PP1 (real PP1)))
(AKCE2))
((type item (= PP1 (string PP1)))
(AKCE3))
((type item (= PP1 (list PP1)))
(AKCE4))
)
?
Protože když napíšu do př.ř. jenom samotné (type item) tak to bez ohledu na to, zda předtím jsem označil nějakou entitu či ne vrací SUBR (což nevím, co znamená).


-------------
-FerTh-


Odeslal: Martin Bielina
Datum odeslání: 13.čvc.2009 v 09:59
aplikace COND a TYPE na Váš případ

(cond
((= (type PP1) "INT"))
(AKCE1))
((= (type PP1) "REAL"))
(AKCE2))
((= (type PP1) "STR"))
(AKCE3))
((= (type PP1) "LIST"))
(AKCE4))
)

SUBR - taho hodnota vrácená funkcí TYPE znamená funkci načtenou Autocadem z kompilovaných souborů VLX FAS nebo také ze zdojových souborů LSP.

Jestli jsem někde něco napsal (opsal z nápovědy AutoCadu) špatně... ať mi prsty upadnou


Odeslal: Ferdinand
Datum odeslání: 13.čvc.2009 v 15:12

OT: To je ukázkový příklad, jak jsem líný zmáčknout F1 a přečíst si Help...Embarrassed



-------------
-FerTh-



Vytisknout stránku | Zavřít okno