求一个字符串处理函数 ( 积分: 100 )

  • 主题发起人 主题发起人 夫罗多
  • 开始时间 开始时间

夫罗多

Unregistered / Unconfirmed
GUEST, unregistred user!
s := 'df4gf54fd<A>5421584<AB>3df2fdg3<A>8946854<AB>63df2gd6<A>4564554546<AB>36fdg3df<A>12354315<AB>df3g2d2g<A>7878875<AB>6dfg66df6......';

如何将S中每一个'<A>' 与 '<AB>' 之间的字符串 用xxxx()函数处理后 再替换掉原来的?最后得到的S 只是所有'<A>' 与 '<AB>' 之间的字符串被处理 其他并不变, 这样的函数应该怎么写?
 
var tempstr:string;
begin
tempstr:='';
while pos('<AB>',s)>0 do
begin
//如果取得<A><AB>间的内容
tempstr:=tempstr+copy(s,pos('<A>')+1,pos('<AB>',s)-1);
//重新对s进行处理
s:=copy(s,pos('<AB>',s)+1,length(s));
end;
end;
可利用类似的方法,自己再完善一下,应该可以达到你要的结果
 
qis2000说的应该可以做到
 
用AnsiReplaceText函数,引用StdCtrls
首部 function AnsiReplaceText(const AText, AFromText, AToText: string): string; $[StrUtils.pas
功能 返回字符串AText中用子串AFromText替换成子串AToText的结果
说明 不区分大小写
参考 function SysUtils.StringReplace; type SysUtils.TReplaceFlags
例子 Edit4.Text := AnsiReplaceText(Edit1.Text, Edit2.Text, Edit3.Text);

s:=AnsiReplaceText(s,'<A>','');
 
我水平不行 弄qis2000的例子半天也搞不明白,谁能给写个功能完整点的函数,万分感谢啊!
 
什麽.?那就應該是一個函數吧
 
s := 'df4gf54fd<A>5421584<AB>3df2fdg3<A>8946854<AB>63df2gd6<A>4564554546<AB>36fdg3df<A>12354315<AB>df3g2d2g<A>7878875<AB>6dfg66df6......';

如何将S中每一个'<A>' 与 '<AB>' 之间的字符串 用xxxx()函数处理后 再替换掉原来的?最后得到的S 只是所有'<A>' 与 '<AB>' 之间的字符串被处理 其他并不变, 这样的函数应该怎么写?

你的要求说得不清不楚 什么叫 所有'<A>' 与 '<AB>' 之间的字符串被处理 ?
是不是结果是:
s := '54215848946854......';

还是要输出到文本:
5421584
8946854
 
哦! 说明一下,我这有个字符串处理函数 是将字符串进行异惑的,主要就是想将S字符串内所有<A>' 与 '<AB>' 之间的字符串用这个函数异惑
原字符串
s := 'df4gf54fd<A>5421584<AB>3df2fdg3<A>8946854<AB>63df2gd6<A>4564554546<AB>36fdg3df<A>12354315<AB>df3g2d2g<A>7878875<AB>6dfg66df6......';
异惑后的效果
s := 'df4gf54fd<A>4545454<AB>3df2fdg3<A>8515565<AB>63df2gd6<A>12253254<AB>36fdg3df<A>56111212<AB>df3g2d2g<A>561213323<AB>6dfg66df6......';

最后得到的S 只有<A>' 与 '<AB>' 之间的内容变化 其他没有变化
 
function StrFun(var desStr:string;labelStr1,labelStr2:string):string;
var tmpStr:string;
preStr:string;
backStr:string;
count:integer;
begin
while pos(labelStr1,desStr)>0 do
begin
prestr := copy(desStr,0,pos(labelStr1,desStr)-1);
count := pos(labelStr2,desStr)-pos(labelStr1,desStr)-length(labelStr1);
tmpStr := copy(desStr,pos(labelStr1,desStr)+length(labelStr1),count);
backstr := copy(desStr,pos(labelStr2,desStr)+length(labelStr2),length(desStr));
desStr := prestr+xxx(tmpStr)+backstr; //xxx是你的字符串处理函数
end;
result := desStr;
end;
 
var
Str: String;//原字符
StartStr: String;//开始标志字符
EndStr: String;//结束标志字符
TempStr: String;//要处理的字符
ResultStr: String;//最后结果字符
MarkIndex: Integer;//标志字符位置
begin
Str := 'df4gf54fd<A>5421584<AB>3df2fdg3<A>8946854<AB>63df2gd6<A>4564554546<AB>36fdg3df<A>12354315<AB>df3g2d2g<A>7878875<AB>6dfg66df6......';
StartStr := '<A>';
EndStr := '<B>';
ResultStr := '';
MarkIndex := Pos(StartStr, Str);
while MarkIndex > 0 do
begin
ResultStr := ResultStr + Copy(Str, 1, MarkIndex + Length(StartStr) - 1);
Str := Copy(Str, MarkIndex + Length(StartStr), Length(Str) - MarkIndex);
MarkIndex := Pos(EndStr, Str);
if MarkIndex > 0 then
begin
TempStr := Copy(Str, 1, MarkIndex - 1);
if Pos(StartStr, Str) > 0 then//如果StartStr和EndStr中间的字符中含有StartStr
ResultStr := ResultStr + TempStr + EndStr
else
ResultStr := ResultStr + XXXX(TempStr) + EndStr;
Str := Copy(Str, MarkIndex + Length(EndStr), Length(Str) - MarkIndex);
end;
MarkIndex := Pos(StartStr, Str);
end;
if Length(Str) > 0 then
ResultStr := ResultStr + Trim(Str);
end;
 
function ChangeStr(const S: string): string;
var
I: Integer;
begin
Result := StringReplace(S, '<A>', '=', [rfReplaceAll]);
Result := StringReplace(Result, '<AB>', ',', [rfReplaceAll]);
with TStringList.Create do
try
CommaText := Result;
for I := 0 to Count - 1 do
ValueFromIndex := XXXX(ValueFromIndex); //处理<A>-<AB>间的string;
Result := CommaText;
finally
Free;
end;
Result := StringReplace(Result, '=', '<A>', [rfReplaceAll]);
Result := StringReplace(Result, ',', '<AB>', [rfReplaceAll]);
end;
 
后退
顶部