一个关于分割字符串的问题(100分)

  • 主题发起人 主题发起人 zhs369479
  • 开始时间 开始时间
Z

zhs369479

Unregistered / Unconfirmed
GUEST, unregistred user!
比如一个字符串123456#123
我怎么取#前的数据和#后面的数据!!!
 
procedure TfmInputJDKPB.Button1Click(Sender: TObject);
var
I: Integer;
str,str1,str2: String;
begin
inherited;
str := '123456#123'; //赋值str为123456#123
I := Pos('#',str); //取得#位置
str1 := Copy(str,1,I); //取得str1(123456)
str2 := Copy(str,I + 1,Length(str)); //取得str2(123)
end;
 
X:= AnsiPos('#',S);
if X <> 0 then begin
S1:= Copy(S, 1, X-1);
S2:= Copy(S, X+1, Length(S)-X);
end;
-------------------------------------
Unit
SysUtils

AnsiPos locates the position of a substring within a string.

function AnsiPos(const Substr, S: string): Integer;

Description

Call AnsiPos to obtain the byte offset of the Substr parameter, as it appears in the string S. For example, if Substr is the string 'AB', and S is the string 'ABCDE', AnsiPos returns 1. If Substr does not appear in the string S, AnsiPos returns 0.

Note

This function supports double-byte character sets (DBCS).
 
tstr:='123456#123';
t1:=copy(tstr,1,pos('#',tstr)-1);//去#前面
t2:=copy(tstrm,pos('#',tstr)+1,length(tstr));//去#后面
 
请问zywcd去掉#后面应该写成copy(tstrm,pos(#,tstrm),length(tstrm)-pos(#,tstrm))
 
去掉#后面的字符
var
s:string;
begin
s:='123456#123';
s:=copy(s,1,pos('#',s))
end;
 
理解错了,我的意思是得到#后面的
 
var
s:string;
begin
s:='123456#123';
s:=copy(s,pos('#',s)+1,length(s));
end;
 
用RUILIN的方法即可
 
除了pos和copy,也可以用循环:
var a,b,s:string;

s:='123456#123';
for i:=1 to length(s) do
begin
if s<>'#' then a:=a+s else break;//到#时中止循环
b:=s;
delete(b,1,i); //删除长度为i的前半截
end;

这样也可以得到两个字符串.至于是选择用pos还是循环,可根据具体情况而定.
 
var
s,s1,s2:string;
begin
s:='123456#123';
s1:=copy(s,1,pos('#',s));//#前面的str
s2:=copy(s,pos('#',s),length(s)-pos('#',s));//#后面的str
end;

来晚了, 估计给我的分不会太多;
郁闷......
 
直接用StrUtils里的AnsiReplaceStr函数
Result: TStringList;

Result.Text := AnsiReplaceStr(Str, '#', #10);
 
越简单的问题,回答的人越多。郁闷
 
楼主是在散分。
 
我想加点难度,123456#12345#1#
怎么判断字段是这样的格式和怎么读取3个#之间的数据啊
 
给你一个我自己认为是最好用的函数:
function GetDelimiteredStringN(Astring:String;Dlmter:Char;nPos:integer):string;
var
sList:TStringList;
begin
Result:='';
sList:=TStringList.Create;
sList.Text:=StringReplace(Astring,Dlmter,#13#10,[rfReplaceAll]);
if (nPos>0) and (sList.Count>=nPos) then Result:=sList[nPos-1];
end;

实例:(这是求出第三个#号与第二个#号之间的数,如果GetDelimiteredStringN(str,'#',2))则是求出第二个#号与第一个#号之间的数....以此类推,也就是说这个数字取n的话,就会取得第n个#号之前的那个数。)
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
begin
str:='123456#12345#1#';
showmessage(GetDelimiteredStringN(str,'#',3));
end;
 
自己写函数,字符串遍历就可以了,步骤是:
1、找出各个#位置
2、再取#和#之间的字符返回就可
 
即使你中间加一万个#号,用我那个方法也可以取出来;
呵呵
 
如果没什么特殊的话先POS在copy 都可以解决你的问题
 
后退
顶部