Author Topic: how to call function and store output in variable ?  (Read 1519 times)

0 Members and 1 Guest are viewing this topic.

vincent.r

  • Newt
  • Posts: 101
how to call function and store output in variable ?
« on: December 09, 2019, 05:41:14 AM »
I made a function to get list of electrical connection data to block. List consist of sub lists of tag, attribute value & insertion point.
Final output stored in variable "masterconnectiondata". Function performs fine.

I am trying to call this function from another program

Code - Auto/Visual Lisp: [Select]
  1. (setq masterconnectiondata1 (vr:checkconnectionpoints sortedlist2))
but not able to store data in variable masterconnectiondata1.

Am I made mistake somewhere ?


code -

Code - Auto/Visual Lisp: [Select]
  1. (defun vr:checkconnectionpoints ( sortedlist1 / dataextractfi1 dataextractatt1 dataextractattval1 dataextracttagval1 dataextractinsval1 connectionpointlist connectionlist )
  2.     (while (/= (length sortedlist1) 0)
  3.          (setq dataextractfi1 (car sortedlist1))
  4.          (setq dataextractatt1 (entnext dataextractfi1))
  5.  
  6.                 (while  (/= (cdr (assoc 0 (entget dataextractatt1))) "SEQEND")
  7.                         (setq dataextractattval1 (cdr (assoc 1 (entget dataextractatt1))))
  8.                         (setq dataextracttagval1 (cdr (assoc 2 (entget dataextractatt1))))
  9.                         (setq dataextractinsval1 (cdr (assoc 10 (entget dataextractatt1))));(SETQ dataextracttagval1 "X4TERMDESC01")
  10.                 (if (and (setq x4testpoint (vl-string-search "X4TERM" dataextracttagval1 0)) (= (vl-string-search "DESC" dataextracttagval1) nil))
  11.                         (progn  (setq connectionpointlist (cons dataextracttagval1 connectionpointlist))
  12.                                 (setq connectionpointlist (cons dataextractattval1 connectionpointlist))
  13.                                 (setq connectionpointlist (cons dataextractinsval1 connectionpointlist))
  14.                                 (setq connectionpointlist (reverse connectionpointlist))
  15.                                 (setq connectionlist (cons connectionpointlist connectionlist));(setq connectionlist nil)
  16.                                 (setq connectionpointlist nil)
  17.                         )
  18.                  )
  19.                         (setq dataextractatt1 (entnext dataextractatt1))
  20.                        
  21.                  )
  22.     (setq masterconnectiondata (cons connectionlist masterconnectiondata ))
  23.     (setq connectionlist nil)
  24.     (setq sortedlist1 (cdr sortedlist1))
  25.    )
  26.  )

EDIT (John): Added code tags.
« Last Edit: December 09, 2019, 11:55:15 AM by John Kaul (Se7en) »

ribarm

  • Gator
  • Posts: 3274
  • Marko Ribar, architect
Re: how to call function and store output in variable ?
« Reply #1 on: December 09, 2019, 05:57:34 AM »
masterconnectiondata variable must be last statement before ending closing bracked of zour sub function... It should also be localized among other localized variables...
Marko Ribar, d.i.a. (graduated engineer of architecture)

:)

M.R. on Youtube

vincent.r

  • Newt
  • Posts: 101
Re: how to call function and store output in variable ?
« Reply #2 on: December 09, 2019, 06:38:15 AM »
Thanks for efforts ribarm !

Tried your suggestion. But it doesn't work. It gives nil output.

Modifies code is -




Code - Auto/Visual Lisp: [Select]
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. (defun vr:checkconnectionpoints ( sortedlist1 / dataextractfi1 dataextractatt1 dataextractattval1 dataextracttagval1 dataextractinsval1 connectionpointlist connectionlist masterconnectiondata masterconnectiondataresult)
  3.     (while (/= (length sortedlist1) 0)
  4.          (setq dataextractfi1 (car sortedlist1))
  5.          (setq dataextractatt1 (entnext dataextractfi1))
  6.  
  7.                 (while  (/= (cdr (assoc 0 (entget dataextractatt1))) "SEQEND")
  8.                         (setq dataextractattval1 (cdr (assoc 1 (entget dataextractatt1))))
  9.                         (setq dataextracttagval1 (cdr (assoc 2 (entget dataextractatt1))))
  10.                         (setq dataextractinsval1 (cdr (assoc 10 (entget dataextractatt1))));(SETQ dataextracttagval1 "X4TERMDESC01")
  11.                 (if (and (setq x4testpoint (vl-string-search "X4TERM" dataextracttagval1 0)) (= (vl-string-search "DESC" dataextracttagval1) nil))
  12.                         (progn  (setq connectionpointlist (cons dataextracttagval1 connectionpointlist))
  13.                                 (setq connectionpointlist (cons dataextractattval1 connectionpointlist))
  14.                                 (setq connectionpointlist (cons dataextractinsval1 connectionpointlist))
  15.                                 (setq connectionpointlist (reverse connectionpointlist))
  16.                                 (setq connectionlist (cons connectionpointlist connectionlist));(setq connectionlist nil)
  17.                                 (setq connectionpointlist nil)
  18.                         )
  19.                  )
  20.                         (setq dataextractatt1 (entnext dataextractatt1))
  21.                        
  22.                  )
  23.     (setq connectionlist nil)
  24.     (setq sortedlist1 (cdr sortedlist1))
  25.     (setq masterconnectiondata (cons connectionlist masterconnectiondata))
  26.    )
  27.   (setq masterconnectiondataresult masterconnectiondata)
  28.  )


EDIT (John): Added code tags.
« Last Edit: December 09, 2019, 11:55:42 AM by John Kaul (Se7en) »

Lee Mac

  • Seagull
  • Posts: 12914
  • London, England
Re: how to call function and store output in variable ?
« Reply #3 on: December 09, 2019, 06:56:22 AM »
Amongst other issues, you are setting the data you have collected to nil before constructing the output list -

Code - Auto/Visual Lisp: [Select]
  1. (setq connectionlist nil) ;; <----- connectionlist is now nil
  2. (setq sortedlist1 (cdr sortedlist1))
  3. (setq masterconnectiondata (cons connectionlist masterconnectiondata)) ;; <----- masterconnectiondata will be a list of nils

vincent.r

  • Newt
  • Posts: 101
Re: how to call function and store output in variable ?
« Reply #4 on: December 09, 2019, 07:12:38 AM »
Oh! my mistake. Thank you Lisp Master.

Thanks for efforts.