报价困难时期
我觉得这有点令人困惑。。。可能是一个简单的解决方案。我有一个C。NET项目,该项目将打开AutoCAD并向其发送命令。命令很简单,但很长。所以我要做的是连接所有这些,并将其传递到send命令中。string vAcadCmd = "(setq ";
vAcadCmd = vAcadCmd + "username \"" + myArray | " \"";
vAcadCmd = vAcadCmd + "email \"" + myArray | " \"";
vAcadCmd = vAcadCmd + "dim_a \"" + myArray | " \"";
.
.and so on through all 48 variables
.
我想要得到的是如下格式的字符串:
(setq username "Person A" email "PersonA@usa.com" dim_a "11" ....etc
当我在VS中将vAcadCmd添加到watch窗口时,我看到了它的值,但它有所有的“\”反斜杠。我也尝试过@literal字符串,但似乎无法掌握如何正确地将字符串格式发送到AutoCAD。 您的转义引号看起来很好,但or运算符在那里做什么??我认为这应该是另一个+。
您可以尝试使用变量字符串quotes=chr(34);
您可能希望用文本构建另一个数组,并遍历变体。在任何情况下,使用StringBuilder类构建字符串,然后调用是“更合适的”。最终结果的ToString()。
写一个C#应用程序来发送Lisp命令让我觉得有点奇怪,但这主要是因为我不理解你的目的。
希望这有帮助
干杯 需要更多信息,比尔。。。你能提供一个数组内容的样本列表吗,需要的前\后等等。?
用myriad+分解串联要比用另一个小+重复设置同一个变量简单得多。也不确定管道在那里做什么(作为“如果”测试?)
几本好书:
C#转换数组,字符串
从中获取和放置Lisp变量。净额
干杯 是的,对不起|应该是另一个+。
我只是想创建这个字符串:
(setq用户名“myusername”电子邮件)myemailaddress@msn.com"...)
只需要构建一个字符串,其中包含这个setq命令,该命令将为48个不同的变量设置值。然后我将使用C#中的SendCommand让AutoCAD执行此命令。
该数组只是一个包含字符串和数字的ListArray,主要是文本“Y”和“N”字段。我需要将数组值放在双引号内。它看起来很好,当我使用C语言将其写入文本文件时,我得到了我想要的,但我在代码中没有使用引号。当我构建这个字符串并在手表窗口中看到它变大时,我一直看到:
(setq username \"MyUserName \" email \"myemaladdress\"....
我不知道\字符是否是在手表窗口中看到它的属性,或者它是否没有逃逸\。 同样,您没有发布足够的代码,我们无法确定问题,因此目前可能是这样的:
string yourCommand "(setq username " + "\"myusername\"" + " email " + "\"myemailaddress@msn.com\"" + "...)";
也不C#处理字符串中的引号与LISP相同。 感谢BlackBox对此的耐心。过去两天我一直因伤缺阵。再说一次,我正在使用的代码中有大量的专有信息,所以为了发布它,我不得不进行大量的编辑。无论如何顺便说一句,我应该包括在这里,这是一个独立的程序。我认为它的官方行话是COM,意思是它在AutoCAD之外运行。这段代码用于我在这里运行的自动化过程,用户输入不仅是不允许的,而且是不可能的,因为所有这些代码都在局域网深处的服务器上的后台运行。
您在帖子中显示的管道字符实际上是反斜杠字符。当我在手表窗口中检查字符串的值时,我看到了反斜杠字符。下面是我正在使用的更多代码:
ArrayList myArray = new ArrayList();
myArray.Add("MyUserName");
myArray.Add("emaladdress@somewhere.com");
myArray.Add(42);
myArray.Add(53);
.
.
.and so forth until all 48 fields are entered
.
.
// Now I need to concatenate a string variable to hold all 48 of those values in a setq command line to be executed by AutoCAD
vAcadCmd = "(setq ");
vAcadCmd = vAcadCmd + "username \"" + myArray + "\" ";
vAcadCmd = vAcadCmd + "email \"" + myArray + "\" ";
vAcadCmd = vAcadCmd + "length \"" + myArray + "\" ";
vAcadCmd = vAcadCmd + "width \"" + myArray + "\" ";
.
.and so forth for all 48 variables
.
vAcadCmd = ")";
// Now open up an instance of AutoCAD and send the setq command to it
.Standard C# code to open up Autocad goes here...
.
vAcadDoc = vAcadApp.Documents.Open("C:\Misc\MyAutoCADFile.dwg", true);
vAcadDoc.SendCommand(vAcadCmd)
现在,我还不确定如何在C语言中正确使用SendCommand的语法。我一直在用VB。但这不是问题所在。我遇到的问题是,当创建字符串vAcadCmd时,我看到它在手表窗口中一步一步地增长。watch窗口显示vAcadCmd的值:
vAcadCmd "(setq username \"MyUserName" email \"emaladdress@somewhere.com\" "
我不知道为什么反斜杠会出现在手表窗口的值列中。我希望最后得到这样的字符串。注意,这被缩短了,因为我不想浪费所有48个变量的空间:
(setq username "MyUserName" email "emaladdress@somewhere.com" length 42 width 53). 我还是不明白这个问题。
反斜杠是将字符串与字符串自身(外部)引号内的引号连接起来的正确语法。
当传递给SendCommand()时,代码是否执行不正确?你现在的实际问题是什么*困惑* 好的,随着测试的深入,会发现字符串被发送到AutoCAD时没有反斜杠。为什么他们会出现在手表窗口,这让我感到困惑。AutoCAD命令窗口中的字符串如下所示:
(setq username "MyUserName@msn.com" eflag "email" dim_a 42 dim_b 48 dwgno "99999" ohs "N" ehs "N" ovs "N" evs "N" slamlock "N" rpl "N" cylock "N" safetychain "N" deletestaple "N" front "N" back "N" side "N" hoaside "N" acudor "N" skirt "N" slabdp 6 debrisfree "N" boltlock "N" hna "N" bitucoat "N" sidedrain "N" grating "N" shocks "N" finish 1 qnum "213111" oversize "N" afrm "1/4 EXTRUDED FRAME" cvrplt 1/4 FLOOR PLATE" rband "1/4 X 2 1/2 F.B." fband "1/4 X 2 1/2 F.B." sband "1/4 X 2 1/2 F.B." hoaband "1/4 X 2 1/2 F.B." numribs 2 rib "C3X2.43#"numhinge 2 hingepn "PART #5" hoapn "PART #92" numshocks 0 numsprgs1 2 numsprgs2 2 hatchwt "82.234811" pdfsize "B" skirtflag "0")
现在,我可以看到,当我把这个粘贴到记事本上时,我要处理一些拼写错误。当我纠正了所有的拼写错误后,AutoCAD毫不费力地处理了命令。所以我还有一些调试要做。稍后再回来。 好吧,这就是为什么这么困惑。。。见第6条。
页:
[1]
2