hdlyt11 发表于 2010-6-8 13:11:00

[求助]字符串指定位置增加字符

谁能帮忙写个小程序,框选图中所有单行文字,搜索出含有分号的单行文字,并在其第一个位置加上字符B,在第四个位置加上字符T,多谢。<font face="Verdana">例如:“356;256”,运行程序后变成“B356;T256”</font>

ZZXXQQ 发表于 2010-6-8 18:32:00


;字串加字符 明经 ZZXXQQ 2010.6.8
(defun c:tt ()
(if (and (princ "\n选择文本 :") (setq ss (ssget '((0 . "TEXT") (1 . "*;*"))))) (progn
(setq n 0)
(repeat (sslength ss)
   (setq ent (entget(ssname ss n))
         n (1+ n)
         txt (cdr(assoc 1 ent))
         txt (strcat "B" (substr txt 1 4) "T" (subst txt 5))
         ent (subst (cons 1 txt) (assoc 1 ent) ent))
   (entmod ent)
)
))
(princ)
)

rongyifei 发表于 2010-6-9 19:26:00

<font face="Verdana">ads_name ssName;<br/>&nbsp;&nbsp;struct resbuf *pRb;<br/>&nbsp;&nbsp;pRb=acutBuildList(0,"TEXT",NULL);<br/>&nbsp;&nbsp;if (acedSSGet(NULL,NULL,NULL,pRb,ssName)!=RTNORM)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;acutRelRb(pRb);<br/>&nbsp;&nbsp;&nbsp;return;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;acutRelRb(pRb);<br/>&nbsp;&nbsp;long ssLength;<br/>&nbsp;&nbsp;ads_name eName;<br/>&nbsp;&nbsp;acedSSLength(ssName,&amp;ssLength);<br/>&nbsp;&nbsp;AcDbObjectId ObjID;<br/>&nbsp;&nbsp;AcDbEntity *pEnt=NULL;<br/>&nbsp;&nbsp;AcDbText *pTxt=NULL;<br/>&nbsp;&nbsp;CString strTxt;<br/>&nbsp;&nbsp;for (long i=0;i&lt;ssLength;i++)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;acedSSName(ssName,i,eName);<br/>&nbsp;&nbsp;&nbsp;acdbGetObjectId(ObjID,eName);<br/>&nbsp;&nbsp;&nbsp;acdbOpenAcDbEntity(pEnt,ObjID,AcDb::kForRead);<br/>&nbsp;&nbsp;&nbsp;pTxt=AcDbText::cast(pEnt);<br/>&nbsp;&nbsp;&nbsp;if (pTxt==NULL)<br/>&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;pEnt-&gt;close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;continue;<br/>&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;strTxt.Format(_T("%s"),pTxt-&gt;textString());<br/>&nbsp;&nbsp;&nbsp;if (strTxt.Find(_T(";"))&gt;=0 || strTxt.Find(_T(";"))&gt;=0)<br/>&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (strTxt.GetAt(0)!='B' &amp;&amp; strTxt.GetAt(6)!='T')<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTxt.Insert(0,'B');<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTxt.Insert(5,'T');<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTxt-&gt;upgradeOpen();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTxt-&gt;setTextString(strTxt);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;pTxt-&gt;close();<br/>&nbsp;&nbsp;&nbsp;pTxt=NULL;<br/>&nbsp;&nbsp;&nbsp;pEnt=NULL;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;acedSSFree(ssName);</font>

hdlyt11 发表于 2010-6-10 19:25:00

好,多谢了,哈哈,还是论坛好,不会被被骂俺太懒。

hdlyt11 发表于 2010-6-10 19:57:00

<p>另外怎样将2d25+(2d12)改为4d25?还请不吝赐教。</p>

hdlyt11 发表于 2010-6-10 20:04:00

也就是用字符串的第一个数字加上左括号后面的第一个数字作为新字符串的第一个数字,加号及后面的都删掉

hdlyt11 发表于 2010-6-11 09:36:00

同时可以吧"2d25+(2d12);2d25"改为"4d25;2d25"

hdlyt11 发表于 2010-6-11 09:40:00

<p>也就是说不能删除分号后面的文字</p>
页: [1]
查看完整版本: [求助]字符串指定位置增加字符