Emmanuel Delay 发表于 2022-7-5 20:27:30

转义字符串

你好
 
我需要转义双引号字符。
 
我读取属性,将值写入文件。这些值需要在文件中转义。
 
----
所以,我需要的应该是这样的,只是这不起作用:

(princ (replace "\"" "\\\"" attribute_value))

;; http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/using-vl-string-subst-to-do-a-find-and-replace-in-external-file/td-p/3732910
(defun replace (newstr oldstr str / localstr)
(setq localstr str)
(while (vl-string-search oldstr localstr)
   (setq localstr (vl-string-subst newstr oldstr localstr))
   (replace newstr oldstr localstr)
)
localstr
)

我不是第一个需要这个的人。

Tharwat 发表于 2022-7-5 20:32:46

也许函数READ就是你想要的?

Emmanuel Delay 发表于 2022-7-5 20:37:51

谢谢,但不是这样。
这正是我所需要的。
 
因此,我有一个具有属性(tag=TFT)的块,值是32“(如32英寸)。我读取块并将数据写入文件。
 
这是我在文本文件中找到的内容:
(“TFT”“32”)
 
我需要在我的文本文件中:
(“TFT”“32”)

Tharwat 发表于 2022-7-5 20:43:08

像这样试试,让我知道。
 

(if (wcmatch (setq st "32\"") "*\"")
(strcat (substr st 1 (1- (strlen st))) (chr 92) (chr 34))
)

SLW210 发表于 2022-7-5 20:44:25

请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。

Emmanuel Delay 发表于 2022-7-5 20:47:41

 
好的,但我只是给了你一个例子。它的格式并不总是这样(不总是在字符串的末尾,也不总是32)。它需要在任何地方替换任何双引号。
这应该只是一个简单的字符串替换。我不明白为什么这么难

Tharwat 发表于 2022-7-5 20:53:58

我也给了你们一个例子
 
如果你感兴趣,那就容易多了。
 

(defun _add:slash (st)
(if (wcmatch st "*\"")
   (strcat (substr st 1 (1- (strlen st))) (chr 92) (chr 34))
)
)

 
函数的使用。
 

(_add:slash "32\"")

Emmanuel Delay 发表于 2022-7-5 20:59:04

我理解你函数的方式:
-它查找以“”结尾的字符串;
-然后将其替换为除最后一个字符外的字符串。
-然后它向字符串中添加\”。
 
------
 
无论如何,我的文件中仍然没有\号。
 
显然,wcmatch永远不会返回true。
(我在你的函数中放了一个princ(我添加了progn),用于调试;未打印任何内容
也许需要搜索“不同的”

Tharwat 发表于 2022-7-5 21:01:46

我之前发布的函数运行良好,无论如何,请显示您的代码以检查它们。

Emmanuel Delay 发表于 2022-7-5 21:07:12

我明天再谈。我将制作一个脚本的最小版本,带有一个最小版本的dwg附件。
 
也许问题出在代码的前面;一些转换/过滤/的函数。。。差不多吧。
页: [1] 2
查看完整版本: 转义字符串