MSasu 发表于 2022-7-6 08:38:06

线程的标题要求创建文件。。。
 
因此,您应该:
[列表]
[*]以读取模式打开文件-打开,
[*]解析每一行,直到文件结束(nil)-同时读取行(&R),
[*]将后缀附加到每行-STRCAT,
[*]将这些行存储到列表中-追加,
[*]完成后,关闭文件-关闭,
[*]以写模式打开文件-打开,
[*]解析所述列表并将项目记录到文件-FOREACH&WRITE-LINE,
[*]完成后,关闭文件;这也将保存它-关闭,
问候,
米尔恰

SCaldeira 发表于 2022-7-6 08:41:57

谢谢你,米尔恰。
 
顺致敬意,

pBe 发表于 2022-7-6 08:44:26

 
现在它有了意义。
 
我想我问错问题了。

MSasu 发表于 2022-7-6 08:46:18

@斯伯泰拉:不客气!
如果您在这段代码中遇到问题,只需将您编写的内容张贴在此处以获得进一步帮助。访问文件时不要忘记关闭文件。
 
当做
米尔恰

MSasu 发表于 2022-7-6 08:51:25

 
我也被帖子的标题搞糊涂了。
 
当做
米尔恰

SCaldeira 发表于 2022-7-6 08:52:53

我试过这么做,但没有成功。你能帮我找出错误吗?
 
lisp代码:
 

(defun C:d2 ( )
(setq DCL (load_dialog "d2")) ;
(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"))
(setq fichTXT (open (getfiled "Defina o nome e a localização do ficheiro TXT da carta." txtfile "txt" 1) "w"))
(prin1 (type fichTXT))
(if (= Escala 25000) (

(write-line (strcat NCarta "-your choice is 25000, line1") fichTXT)
(write-line (strcat NCarta "-your choice is 25000, line2") fichTXT)
(write-line (strcat NCarta "-your choice is 25000, line3") fichTXT)
;......an so on
(close fichTXT)
))
;----------------------------------
(if (= Escala 10000) (

(write-line (strcat NCarta "-your choice is 10000, line1") fichTXT)
(write-line (strcat NCarta "-your choice is 10000, line2") fichTXT)
(write-line (strcat NCarta "-your choice is 10000, line3") fichTXT)
;......an so on
(close fichTXT)
))
;----------------------------------
(if (= Escala 5000) (

(write-line (strcat NCarta "-your choice is 5000, line1") fichTXT)
(write-line (strcat NCarta "-your choice is 5000, line2") fichTXT)
(write-line (strcat NCarta "-your choice is 5000, line3") fichTXT)
;......an so on
(close fichTXT)
))
)

dcl代码:
 

/* Dialog Box: carta2 */
CARTA2: dialog { label = "Escala da Carta";

:radio_button {key = "25M"; label = "Carta 1:25000"; }
:radio_button {key = "10M"; label = "Carta 1:10000"; }
:radio_button {key = "5M"; label = "Carta 1:5000"; }
spacer;
:edit_box { label = "ID da Carta "; key = "IDCarta"; width = 7; }
spacer;
ok_cancel;
}

MSasu 发表于 2022-7-6 08:58:04

我会看看你的代码;同时,请编辑您的最后一篇文章,添加代码括号。
 
当做
米尔恰

MSasu 发表于 2022-7-6 09:00:05

我用COND重写了代码。此外,最好在尝试访问新文件之前验证用户是否为其提供了名称。
 
(defun C:d2 ( / DCL NCarta Escala lspdir txtfile fichTXT )
(setq DCL (load_dialog "d2")) ;
(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)
    (write-line (strcat NCarta "-your choice is 25000, line1") fichTXT)
    (write-line (strcat NCarta "-your choice is 25000, line2") fichTXT)
    (write-line (strcat NCarta "-your choice is 25000, line3") fichTXT)
    ;......an so on
   )
   ((= Escala 10000)
    (write-line (strcat NCarta "-your choice is 10000, line1") fichTXT)
    (write-line (strcat NCarta "-your choice is 10000, line2") fichTXT)
    (write-line (strcat NCarta "-your choice is 10000, line3") fichTXT)
    ;......an so on
   )
   ((= Escala 5000)
    (write-line (strcat NCarta "-your choice is 5000, line1") fichTXT)
    (write-line (strcat NCarta "-your choice is 5000, line2") fichTXT)
    (write-line (strcat NCarta "-your choice is 5000, line3") fichTXT)
    ;......an so on
   )
   )
)
)
(close fichTXT)
)
 
如果要使用If,则不要忘记用PROGN封装表达式:
 
(if (= Escala 10000)
(progn
(write-line (strcat NCarta "-your choice is 10000, line1") fichTXT)
(write-line (strcat NCarta "-your choice is 10000, line2") fichTXT)
(write-line (strcat NCarta "-your choice is 10000, line3") fichTXT)
                               ;......an so on
)
)
 
此外,我将让CLOSE调用在“条件”代码之外,以确保文件已关闭。
 
当做
米尔恰

SCaldeira 发表于 2022-7-6 09:04:59

这是正确的。好极了
谢谢你,米尔恰。
 
:D:D

MSasu 发表于 2022-7-6 09:05:04

不客气!
 
当做
米尔恰
页: 1 [2]
查看完整版本: 如何创建txt文件