首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-02-17 
从memo取出一段字符串,每行后都跟着“#$A#$A#$A#$A#$D#$A”,如何去掉,只有“#$D#$A”呢我是从一个Memo中取出来

从memo取出一段字符串,每行后都跟着“#$A#$A#$A#$A#$D#$A”,如何去掉,只有“#$D#$A”呢
我是从一个Memo中取出来,然后把内容写道Word文档中去的,结果发现在Word中每行后又多了四个空行。查原因,发现传给Word的字符串中每行后有“#$A#$A#$A#$A#$D#$A”,我估计#$A#$A#$A#$A就是再多四行。请问我该如何处理呢?

[解决办法]
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替换成‘’就行了
[解决办法]
先去掉里面的子串"#$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]);

[解决办法]
stringreplace(tem, #$A#$A#$A#$A, " ",[rfReplaceAll]);
[解决办法]
StringReplace是可以的,注意不要用十六进制,把它转成10进制试试。

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

Delphi(Pascal) code
//格式化XML文本,去掉tab和换行AXmlDoc.XML.Text := StringReplace(AXmlDoc.XML.Text, #9, EmptyStr, [rfReplaceAll]);AXmlDoc.XML.Text := StringReplace(AXmlDoc.XML.Text, #13#10, EmptyStr, [rfReplaceAll]); 

热点排行