从memo取出一段字符串,每行后都跟着“#$A#$A#$A#$A#$D#$A”,如何去掉,只有“#$D#$A”呢

kerisyml 2007-08-17 11:12:54
我是从一个Memo中取出来,然后把内容写道Word文档中去的,结果发现在Word中每行后又多了四个空行。查原因,发现传给Word的字符串中每行后有“#$A#$A#$A#$A#$D#$A”,我估计#$A#$A#$A#$A就是再多四行。请问我该如何处理呢?
...全文
471 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightyang 2007-08-17
  • 打赏
  • 举报
回复
先去掉里面的子串"#$A#$A#$A#$A#$D#$A

Unit
SysUtils

type
TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);
rfReplaceAll对s中的oldpattern全部替换为newpattern,rfIgnoreCase不区分大小写。
function StringReplace(const S, OldPattern, NewPattern: string
; Flags: TReplaceFlags): string;

s:=stringreplace(s,'.','',[rfReplaceAll]);
hsmserver 2007-08-17
  • 打赏
  • 举报
回复
procedure replace(var s:string;const SourceChar:pchar;const RChar:pchar);
//第一个参数是原串,第二个是模式串,第三个是替换串
var
ta,i,j:integer;
m,n,pn,sn:integer;
SLen,SCLen,RCLen:integer;//SLen表示原串的长度,SCLen表示模式传的长度,RCLen表示替换串的长度
IsSame:integer;
newp:array of char;//用来保存替换后的字符数组
begin
SLen:=strlen(pchar(s));SCLen:=strlen(SourceChar);RCLen:=strlen(RChar);
j:=pos(string(SourceChar),s);
s:=s+chr(0);ta:=0;i:=j;
while s[i]<>chr(0) do //这个循环用ta统计模式串在原串中出现的次数
begin
n:=0;IsSame:=1;
for m:=i to i+SCLen-1 do
begin
if m>SLen then begin IsSame:=0;break; end;
if s[m]<>sourceChar[n] then begin IsSame:=0;break; end;
n:=n+1;
end;
if IsSame=1 then begin ta:=ta+1;i:=m; end else i:=i+1;
end;
if j>0 then
begin
pn:=0;sn:=1;
setlength(newp,SLen-ta*SCLen+ta*RCLen+1);//分配newp的长度,+1表示后面还有一个#0结束符
while s[sn]<>chr(0) do //主要循环,开始替换
begin
n:=0;IsSame:=1;
for m:=sn to sn+SCLen-1 do //比较子串是否和模式串相同
begin
if m>SLen then begin IsSame:=0;break; end;
if s[m]<>sourceChar[n] then begin IsSame:=0;break; end;
n:=n+1;
end;
if IsSame=1 then//相同
begin
for m:=0 to RCLen-1 do
begin
newp[pn]:=RChar[m];pn:=pn+1;
end;
sn:=sn+SCLen;
end
else
begin //不同
newp[pn]:=s[sn];
pn:=pn+1;sn:=sn+1;
end;
end;
newp[pn]:=#0;
s:=string(newp); //重置s,替换完成!
end;
end;
将#$A和#$D替换成‘’就行了
kerisyml 2007-08-17
  • 打赏
  • 举报
回复
以下是我从memo中取出来的string

'问:我们是民警,现向你出示人民警察证,你看清楚了吗?'#$A#$A#$A#$A#$D#$A'答:我看清楚了。'#$A#$A#$A#$A#$D#$A'问:现依法对你进行询问,你必须如实回答,不得隐瞒事实或作虚假陈述,否则将承担法律责任;对与本案无关的问题,你有拒绝回答的权利,你听清楚了吗?'#$A#$A#$A#$A#$D#$A'答:我听清楚了。'#$A#$A#$A#$A#$D#$A'问:根据有关法律规定,如果你认为我们与本案有利害关系,可能影响本案的公正处理的,你有申请回避的权利,你需要申请吗?'#$A#$A#$A#$A#$D#$A'答:我不要申请。'#$A#$A#$A#$A#$D#$A'问:你为什么到这儿来?'#$A#$A#$A#$A#$D#$A'答:我收到了你们违法行为处理通知书,说我的机动车有超速行为,我就过来处理。'#$A#$A#$A#$A#$D#$A'问:你所有的机动车是什么车子,有何特征?'#$A#$A#$A#$A#$D#$A'答:小型汽车, 苏D11111。'#$A#$A#$A#$A#$D#$A'问:(出示图像资料)这是你的车吗?'#$A#$A#$A#$A#$D#$A'答:是的,车号为苏D11111小型汽车。'#$A#$A#$A#$A#$D#$A'问:2006年05月15日15时23分,在312国道遥观路段苏D11111号牌的小车是谁驾驶的?'#$A#$A#$A#$A#$D#$A'答:是我。'#$A#$A#$A#$A#$D#$A'问:根据图像资料显示,该苏D11111号牌的小型汽车在2006年05月15日15时23分,在312国道遥观路段路段行驶时速为100km/h,而该路段限速为60km/h,超速67%,对吗?'#$A#$A#$A#$A#$D#$A'答:(看过图像资料)从图像资料显示车速是这样的。'#$A#$A#$A#$A#$D#$A'问:请你在该图像资料上签名。'#$A#$A#$A#$A#$D#$A'答:好的。'#$A#$A#$A#$A#$D#$A'问:请你核对一下笔录,若无差错请签字?'
kerisyml 2007-08-17
  • 打赏
  • 举报
回复
不行的,我大概有10行数据呢,我怎么COPY掉呀,我本来想用stringreplace的,结果不行
brightyang 2007-08-17
  • 打赏
  • 举报
回复
copy()
掉就行了
gooddancer 2007-08-17
  • 打赏
  • 举报
回复
关注
树上猪 2007-08-17
  • 打赏
  • 举报
回复
用copy和pos循环取值,大致算法是只要i:=POS(memo1.text,#$A#$A#$A#$A#$D#$A)不小于1,取的值就累加,while i>0 do begin ..... end temp1=temp2,
kerisyml 2007-08-17
  • 打赏
  • 举报
回复
谢谢,问题已解决
Harryfin 2007-08-17
  • 打赏
  • 举报
回复
StringReplace是可以的,注意不要用十六进制,把它转成10进制试试。

这个是我前段时间写的格式化XML语句,跟你的是完全一样的。#13#10也就是#$D#$A了

//格式化XML文本,去掉tab和换行
AXmlDoc.XML.Text := StringReplace(AXmlDoc.XML.Text, #9, EmptyStr, [rfReplaceAll]);
AXmlDoc.XML.Text := StringReplace(AXmlDoc.XML.Text, #13#10, EmptyStr, [rfReplaceAll]);
tigerii 2007-08-17
  • 打赏
  • 举报
回复
stringreplace(tem, #$A#$A#$A#$A, " ",[rfReplaceAll]);
kerisyml 2007-08-17
  • 打赏
  • 举报
回复
没用的,我用stringreplace(tem,'#$A#$A#$A#$A','',[rfReplaceAll]);结果根本没有反应的,还是老样子啊

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧