pBe Posted April 3, 2012 Posted April 3, 2012 (edited) FWIW (defun C:d2 (/ DCL NCarta Escala lspdir txtfile fichTXT f i) (setq DCL (load_dialog "d2")) ; (new_dialog "CARTA2" DCL) (action_tile "IDCarta" "(setq NCarta (get_tile \"IDCarta\"))" ) (action_tile "25M" "(setq Escala [color=blue]\"25000\"[/color])") (action_tile "10M" "(setq Escala [color=blue]\"10000\"[/color])") (action_tile "5M" "(setq Escala [color=blue]\"5000\"[/color])") (action_tile "accept" "(done_dialog)") ; (action_tile "cancel" "(setq NCarta nil)(done_dialog)") (start_dialog) ; Inicia (unload_dialog DCL) ; ;---------------------------------- (setq lspdir "E:\\CartasTXT\\") (setq txtfile (strcat lspdir "notes")) [color=blue](cond ((and NCarta[/color] [color=blue] Escala[/color] [color=blue] (setq fichTXT[/color] [color=blue] (getfiled "Defina o nome e a localização do ficheiro TXT da carta."[/color] [color=blue] txtfile[/color] [color=blue] "txt"[/color] [color=blue] 1[/color] [color=blue] )[/color] [color=blue] )[/color] [color=blue] (setq fichTXT (open fichTXT "w") i 0[/color] [color=blue] )[/color] [color=blue] (prin1 (type fichTXT))[/color] [color=blue] (setq f (car (member Escala '("25000" "10000" "5000"))))[/color] [color=blue] (repeat 3[/color] [color=blue] (write-line[/color] [color=blue] (strcat NCarta[/color] [color=blue] "-your choice is " f ", line"[/color] [color=blue] (itoa (setq i (1+ i)))[/color] [color=blue] )[/color] [color=blue] fichTXT[/color] [color=blue] )[/color] [color=blue] )[/color] [color=blue] (close fichTXT)[/color] [color=blue] )[/color] [color=blue])[/color] [color=blue] )[/color] [color=blue] (princ)[/color] ) Edited April 3, 2012 by pBe Quote
pBe Posted April 3, 2012 Posted April 3, 2012 Magnific job. thanks pBe. Cool beans.. I updated the code. I neglected to change this line "-your choice is 10000, line" to "-your choice is " f ", line" My bad Cheers Quote
SCaldeira Posted April 5, 2012 Author Posted April 5, 2012 In the dialog box when I choose the 5000 option with the end of the variable (1, 2, 3 or 4), the program returns a error. Can you help me to find it? Lisp code: (defun C:fin3 ( / DCL NCarta Escala lspdir txtfile fichTXT ) (setq DCL (load_dialog "c2")) ; (new_dialog "CARTA2" DCL) (action_tile "IDCarta" "(setq NCarta (get_tile \"IDCarta\"))") (action_tile "25M" "(setq Escala 25000)") (action_tile "10M" "(setq Escala 10000)") (action_tile "5M" "(setq Escala 5000)") (action_tile "accept" "(done_dialog)") ; (action_tile "cancel" "(setq NCarta nil)(done_dialog)") (start_dialog) ; Inicia (unload_dialog DCL) ; ;---------------------------------- (setq lspdir "E:\\CartasTXT\\") (setq txtfile (strcat lspdir "notes")) (if (and NCarta Escala (setq fichTXT (getfiled "Defina o nome e a localização do ficheiro TXT da carta." txtfile "txt" 1))) (progn (setq fichTXT (open fichTXT "w")) (prin1 (type fichTXT)) (cond ((= Escala 25000) (setq VAR1(strcat NCarta ".1.11.1 ")) (setq VAR2(strcat NCarta ".1.11.2 ")) (setq VAR3(strcat NCarta ".1.11.3 ")) (setq VAR4(strcat NCarta ".1.11.4 ")) (setq VAR5(strcat NCarta ".1.12.1 ")) (setq VAR6(strcat NCarta ".1.12.2 ")) (setq VAR7(strcat NCarta ".1.12.3 ")) (setq VAR8(strcat NCarta ".1.12.4 ")) (setq VAR9(strcat NCarta ".1.13.1 ")) (setq VAR10(strcat NCarta ".1.13.2 ")) (write-line (strcat VAR1 VAR2 VAR3 VAR4 VAR5 VAR6 VAR7 VAR8 VAR9 VAR10) fichTXT) ) ((= Escala 10000) (setq VAR1(strcat NCarta ".11.1 ")) (setq VAR2(strcat NCarta ".11.2 ")) (setq VAR3(strcat NCarta ".11.3 ")) (setq VAR4(strcat NCarta ".11.4 ")) (setq VAR5(strcat NCarta ".12.1 ")) (setq VAR6(strcat NCarta ".12.2 ")) (setq VAR7(strcat NCarta ".12.3 ")) (setq VAR8(strcat NCarta ".12.4 ")) (setq VAR9(strcat NCarta ".13.1 ")) (setq VAR10(strcat NCarta ".13.2 ")) (write-line (strcat VAR1 VAR2 VAR3 VAR4 VAR5 VAR6 VAR7 VAR8 VAR9 VAR10) fichTXT) ) ((= Escala 5000) (setq TamStr (strlen NCarta)) (setq NCarta2 (substr NCarta 1 (- TamStr 1))) (setq TerminChar (substr Ncarta TamStr 1)) (if (= TerminChar "1") ( (setq VARA01(strcat NCarta2 "11.1 ")) (setq VARA02(strcat NCarta2 "11.2 ")) (setq VARA03(strcat NCarta2 "11.3 ")) (setq VARA04(strcat NCarta2 "11.4 ")) (setq VARA05(strcat NCarta2 "12.1 ")) (setq VARA06(strcat NCarta2 "12.2 ")) (setq VARA07(strcat NCarta2 "12.3 ")) (setq VARA08(strcat NCarta2 "12.4 ")) (setq VARA25(strcat NCarta2 "13.1 ")) (setq VARA09(strcat NCarta2 "13.3 ")) (setq VARA10(strcat NCarta2 "21.1 ")) (write-line (strcat VARA01 VARA02 VARA03 VARA04 VARA05 VARA06 VARA07 VARA08 VARA09 VARA10) fichTXT) ) (if (= TerminChar "2") ( (setq VARB01(strcat NCarta2 "13.2 ")) (setq VARB02(strcat NCarta2 "13.4 ")) (setq VARB03(strcat NCarta2 "14.1 ")) (setq VARB04(strcat NCarta2 "14.2 ")) (setq VARB05(strcat NCarta2 "14.3 ")) (setq VARB06(strcat NCarta2 "14.4 ")) (setq VARB07(strcat NCarta2 "15.1 ")) (setq VARB08(strcat NCarta2 "15.2 ")) (setq VARB09(strcat NCarta2 "15.3 ")) (setq VARB10(strcat NCarta2 "15.4 ")) (write-line (strcat VARB01 VARB02 VARB03 VARB04 VARB05 VARB06 VARB07 VARB08 VARB09 VARB10) fichTXT) ) (if (= TerminChar "3") (;inicio do prog do if char3 (setq VARC01(strcat NCarta2 "31.3 ")) (setq VARC02(strcat NCarta2 "31.4 ")) (setq VARC03(strcat NCarta2 "32.3 ")) (setq VARC04(strcat NCarta2 "32.4 ")) (setq VARC05(strcat NCarta2 "33.3 ")) (setq VARC06(strcat NCarta2 "41.1 ")) (setq VARC07(strcat NCarta2 "41.2 ")) (setq VARC08(strcat NCarta2 "41.3 ")) (setq VARC09(strcat NCarta2 "41.4 ")) (setq VARC10(strcat NCarta2 "42.1 ")) (write-line (strcat VARC01 VARC02 VARC03 VARC04 VARC05 VARC06 VARC07 VARC08 VARC09 VARC10) fichTXT) );fim do prog do if char3 (if (= TerminChar "4") (;inicio do prog do if char4 (setq VARD01(strcat NCarta2 "33.4 ")) (setq VARD02(strcat NCarta2 "34.3 ")) (setq VARD03(strcat NCarta2 "34.4 ")) (setq VARD04(strcat NCarta2 "35.3 ")) (setq VARD05(strcat NCarta2 "35.4 ")) (setq VARD06(strcat NCarta2 "43.2 ")) (setq VARD07(strcat NCarta2 "43.4 ")) (setq VARD08(strcat NCarta2 "44.1 ")) (setq VARD09(strcat NCarta2 "44.2 ")) (setq VARD10(strcat NCarta2 "44.3 ")) (write-line (strcat VARD01 VARD02 VARD03 VARD04 VARD05 VARD06 VARD07 VARD08 VARD09 VARD10) fichTXT) );fim do prog do if char4 );fim do if char4 );fim do if char3 );fim do if char2 );fim do if char1 );fim do progn 5000 );fim do cond );fim do progn );fim do if (close fichTXT) ) DCL Code: /* Dialog Box: carta2 */ CARTA2: dialog { label = "Escala da Carta"; :radio_button {key = "25M"; label = "Carta 1:25000 XXX"; } :radio_button {key = "10M"; label = "Carta 1:10000 XXX . X"; } :radio_button {key = "5M"; label = "Carta 1:5000 XXX . X . X"; } spacer; :edit_box { label = "ID da Carta "; key = "IDCarta"; width = 7; } spacer; ok_cancel; } Best Regards. Quote
MSasu Posted April 5, 2012 Posted April 5, 2012 You should check the enclosing of instructions under those IF's - check PROGN usage on help. Also, don't call CLOSE file outside main code - it will generate an error when user cancel file input: ... );fim do cond [color=red](close fichTXT) [/color] );fim do progn );fim do if ) Regards, Mircea Quote
MSasu Posted April 5, 2012 Posted April 5, 2012 Please check if this what you are looking for: (cond ((= TerminChar "1") (setq VARA01 (strcat NCarta2 "11.1 ")) (setq VARA02 (strcat NCarta2 "11.2 ")) (setq VARA03 (strcat NCarta2 "11.3 ")) (setq VARA04 (strcat NCarta2 "11.4 ")) (setq VARA05 (strcat NCarta2 "12.1 ")) (setq VARA06 (strcat NCarta2 "12.2 ")) (setq VARA07 (strcat NCarta2 "12.3 ")) (setq VARA08 (strcat NCarta2 "12.4 ")) (setq VARA25 (strcat NCarta2 "13.1 ")) (setq VARA09 (strcat NCarta2 "13.3 ")) (setq VARA10 (strcat NCarta2 "21.1 ")) (write-line (strcat VARA01 VARA02 VARA03 VARA04 VARA05 VARA06 VARA07 VARA08 VARA09 VARA10) fichTXT) ) ((= TerminChar "2") (setq VARB01 (strcat NCarta2 "13.2 ")) (setq VARB02 (strcat NCarta2 "13.4 ")) (setq VARB03 (strcat NCarta2 "14.1 ")) (setq VARB04 (strcat NCarta2 "14.2 ")) (setq VARB05 (strcat NCarta2 "14.3 ")) (setq VARB06 (strcat NCarta2 "14.4 ")) (setq VARB07 (strcat NCarta2 "15.1 ")) (setq VARB08 (strcat NCarta2 "15.2 ")) (setq VARB09 (strcat NCarta2 "15.3 ")) (setq VARB10 (strcat NCarta2 "15.4 ")) (write-line (strcat VARB01 VARB02 VARB03 VARB04 VARB05 VARB06 VARB07 VARB08 VARB09 VARB10) fichTXT) ) ((= TerminChar "3") (setq VARC01 (strcat NCarta2 "31.3 ")) (setq VARC02 (strcat NCarta2 "31.4 ")) (setq VARC03 (strcat NCarta2 "32.3 ")) (setq VARC04 (strcat NCarta2 "32.4 ")) (setq VARC05 (strcat NCarta2 "33.3 ")) (setq VARC06 (strcat NCarta2 "41.1 ")) (setq VARC07 (strcat NCarta2 "41.2 ")) (setq VARC08 (strcat NCarta2 "41.3 ")) (setq VARC09 (strcat NCarta2 "41.4 ")) (setq VARC10 (strcat NCarta2 "42.1 ")) (write-line (strcat VARC01 VARC02 VARC03 VARC04 VARC05 VARC06 VARC07 VARC08 VARC09 VARC10) fichTXT) ) ((= TerminChar "4") (setq VARD01 (strcat NCarta2 "33.4 ")) (setq VARD02 (strcat NCarta2 "34.3 ")) (setq VARD03 (strcat NCarta2 "34.4 ")) (setq VARD04 (strcat NCarta2 "35.3 ")) (setq VARD05 (strcat NCarta2 "35.4 ")) (setq VARD06 (strcat NCarta2 "43.2 ")) (setq VARD07 (strcat NCarta2 "43.4 ")) (setq VARD08 (strcat NCarta2 "44.1 ")) (setq VARD09 (strcat NCarta2 "44.2 ")) (setq VARD10 (strcat NCarta2 "44.3 ")) (write-line (strcat VARD01 VARD02 VARD03 VARD04 VARD05 VARD06 VARD07 VARD08 VARD09 VARD10) fichTXT) ) ) Regards, Mircea Quote
SCaldeira Posted April 5, 2012 Author Posted April 5, 2012 Thanks Mircea, for the fast response. I corrected the code, but does not work. Quote
pBe Posted April 5, 2012 Posted April 5, 2012 Hint: (IF (= TerminChar "1"); (setq VARA01(strcat NCarta2 "11.1 ")) (setq VARA02(strcat NCarta2 "11.2 ")) (setq VARA03(strcat NCarta2 "11.3 ")) (setq VARA04(strcat NCarta2 "11.4 ")) ...................... (COND ((= TerminChar "1")......) ((= TerminChar "2")......) Quote
pBe Posted April 5, 2012 Posted April 5, 2012 Please check if this what you are looking for: (cond ..... Regards, Mircea I must've hold the record for the slowest typist in the world today Quote
MSasu Posted April 5, 2012 Posted April 5, 2012 To simplify further: ;;; lST2STR ;;; Returns a string which is the concatenation of a list and a separator ;;; Author: Gile ;;; Arguments ;;; str = the string ;;; sep = the separator pattern (defun lst2str (lst sep) (if (cadr lst) (strcat (vl-princ-to-string (car lst)) sep (lst2str (cdr lst) sep) ) (vl-princ-to-string (car lst)) ) ) (cond ((= TerminChar "1") (setq listValues '("11.1" "11.2" "11.3" "11.4" "12.1" "12.2" "12.3" "12.4" "13.3" "21.1"))) ((= TerminChar "2") (setq listValues '("13.2" "13.4" "14.1" "14.2" "14.3" "14.4" "15.1" "15.2" "15.3" "15.4"))) ((= TerminChar "3") (setq listValues '("31.3" "31.4" "32.3" "32.4" "33.3" "41.1" "41.2" "41.3" "41.4" "42.1"))) ((= TerminChar "4") (setq listValues '("33.4" "34.3" "34.4" "35.3" "35.4" "43.2" "43.4" "44.1" "44.2" "44.3"))) (T (setq listValues nil) ) (if listValues (write-line (lst2str listValues " ") fichTXT)) Regards, Mircea Quote
MSasu Posted April 5, 2012 Posted April 5, 2012 I corrected the code, but does not work. If you want to use IF instead of COND, then your code should look like: (if (= TerminChar "1") (progn ;inicio do prog do if char1 (setq VARA01 (strcat NCarta2 "11.1 ")) (setq VARA02 (strcat NCarta2 "11.2 ")) (setq VARA03 (strcat NCarta2 "11.3 ")) (setq VARA04 (strcat NCarta2 "11.4 ")) (setq VARA05 (strcat NCarta2 "12.1 ")) (setq VARA06 (strcat NCarta2 "12.2 ")) (setq VARA07 (strcat NCarta2 "12.3 ")) (setq VARA08 (strcat NCarta2 "12.4 ")) [color=red] (setq VARA25 (strcat NCarta2 "13.1 "))[/color] (setq VARA09 (strcat NCarta2 "13.3 ")) (setq VARA10 (strcat NCarta2 "21.1 ")) (write-line (strcat VARA01 VARA02 VARA03 VARA04 VARA05 VARA06 VARA07 VARA08 VARA09 VARA10) fichTXT) ) (if (= TerminChar "2") ;equivalent to ELSE 1 (progn ;inicio do prog do if char2 (setq VARB01 (strcat NCarta2 "13.2 ")) (setq VARB02 (strcat NCarta2 "13.4 ")) (setq VARB03 (strcat NCarta2 "14.1 ")) (setq VARB04 (strcat NCarta2 "14.2 ")) (setq VARB05 (strcat NCarta2 "14.3 ")) (setq VARB06 (strcat NCarta2 "14.4 ")) (setq VARB07 (strcat NCarta2 "15.1 ")) (setq VARB08 (strcat NCarta2 "15.2 ")) (setq VARB09 (strcat NCarta2 "15.3 ")) (setq VARB10 (strcat NCarta2 "15.4 ")) (write-line (strcat VARB01 VARB02 VARB03 VARB04 VARB05 VARB06 VARB07 VARB08 VARB09 VARB10) fichTXT) ) (if (= TerminChar "3") ;equivalent to ELSE 2 (progn ;inicio do prog do if char3 (setq VARC01 (strcat NCarta2 "31.3 ")) (setq VARC02 (strcat NCarta2 "31.4 ")) (setq VARC03 (strcat NCarta2 "32.3 ")) (setq VARC04 (strcat NCarta2 "32.4 ")) (setq VARC05 (strcat NCarta2 "33.3 ")) (setq VARC06 (strcat NCarta2 "41.1 ")) (setq VARC07 (strcat NCarta2 "41.2 ")) (setq VARC08 (strcat NCarta2 "41.3 ")) (setq VARC09 (strcat NCarta2 "41.4 ")) (setq VARC10 (strcat NCarta2 "42.1 ")) (write-line (strcat VARC01 VARC02 VARC03 VARC04 VARC05 VARC06 VARC07 VARC08 VARC09 VARC10) fichTXT) ) ;fim do prog do if char3 (if (= TerminChar "4") ;equivalent to ELSE 3 (progn ;inicio do prog do if char4 (setq VARD01 (strcat NCarta2 "33.4 ")) (setq VARD02 (strcat NCarta2 "34.3 ")) (setq VARD03 (strcat NCarta2 "34.4 ")) (setq VARD04 (strcat NCarta2 "35.3 ")) (setq VARD05 (strcat NCarta2 "35.4 ")) (setq VARD06 (strcat NCarta2 "43.2 ")) (setq VARD07 (strcat NCarta2 "43.4 ")) (setq VARD08 (strcat NCarta2 "44.1 ")) (setq VARD09 (strcat NCarta2 "44.2 ")) (setq VARD10 (strcat NCarta2 "44.3 ")) (write-line (strcat VARD01 VARD02 VARD03 VARD04 VARD05 VARD06 VARD07 VARD08 VARD09 VARD10) fichTXT) ) ;fim do prog do if char4 ) ;fim do if char4 ) ;fim do if char3 ) ;fim do if char2 ) ;fim do if char1 You may also want to check that VARA25 variable that isn't used and isn't consistent with the rest of the code. Regards, Mircea Quote
SCaldeira Posted April 5, 2012 Author Posted April 5, 2012 Problem solved. Thank you my friends. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.