delphi字符串问题
40240|42180|42160|42160|42160|42160|42100|42100|42100|42100|42100|42140|42160|42160|4...
40240|42180|42160|42160|42160|42160|42100|42100|42100|42100|42100|42140|42160|42160|42160|42100|42100|42140|42100|42100|42100|42100|42100|42100|42100|42100|42160|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42160|42200|42100|42100|42100|42100|42100|42100|42100|42160|42100|42160|42160|42200|42220|42100|42100|42140|42160|42160|42120|42100|42160|42160|42160|42100|42100|42100|42120|42100|42100|42120|42140|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42140|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42180|42100|42100|42100|42120|42100|42100|42100|42100|42100|42100|42100|42180|42100|42100|42100|42100|42120|42100|42100|42100|42100|42100|42100|42120|42100|42160|42120|42120|42120|42120|42180|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42140|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42160|42120|42120|42120|42120|42120|42120|42120|42100|42100|42120|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42100|42120|42120|42180|42220|42100|42120|42100|42120|42120|42120|42120|42120|42220|42160|42140|42160|42120|42120|42120|42100|42120|42160|42180|42140|42220|42180|42180|42160|42260|42240|42180|42160|42120|42120|42120|42120|42120|42120|42180|42120|42120|42160|42120|42120|42140|42120|42120|42120|42120|42120|42140|42120|42120|42120|42120|42120|42120|42120|42120|42120|42120|42100|42120|42100|42100|42120|42100|42120|42160|42100|42100|42100|42120|42100|42160|42100|42100|42100|42100|42100|42100|42100|42120|42160|42100|42100|42120|42100|42100|42100|42100|42140|42140|42100|42120|42100|42120|42180|42120|42100|42100|42100|42120|42100|42100|42100|42200|42100|42100|42100|42120|42120|42100|42100|42100|42120|42160|42100|42100|42200|42220|42220|42160|42160|42160|42160|42160|42160|42160|42160|42160|42100|42100|42100|42160|42100|42100|42100|42120|42100|42100|42100|42200|42160|42160|42160|42160|42060|32940|60| 怎样把以“|”相隔的数据,分离出来 分成“数组(42120,42120,.....32940,60)”
展开
6个回答
展开全部
var
i :Integer;
sl :TStringList;
StrArr :array of string;
TestStr :string;
begin
TestStr := '|42060|32940|60|';
sl := TStringList.Create;
try
if TestStr[1] = '|' then //当第一个字符为|时去掉
TestStr := Copy(TestStr,2,Length(TestStr) - 1);
if TestStr[Length(TestStr)] = '|' then //当最后一个字符为|时去掉
TestStr := Copy(TestStr,1,Length(TestStr) - 1);
sl.Delimiter := '|'; //以|为分隔符来分割字符串
sl.DelimitedText := TestStr;
SetLength(StrArr,sl.Count);
for i := 0 to sl.Count - 1 do
StrArr[i] := sl.Strings[i];
for i := 0 to High(StrArr) do
ShowMessage(StrArr[i]);
finally
FreeAndNil(sl);
end;
end;
i :Integer;
sl :TStringList;
StrArr :array of string;
TestStr :string;
begin
TestStr := '|42060|32940|60|';
sl := TStringList.Create;
try
if TestStr[1] = '|' then //当第一个字符为|时去掉
TestStr := Copy(TestStr,2,Length(TestStr) - 1);
if TestStr[Length(TestStr)] = '|' then //当最后一个字符为|时去掉
TestStr := Copy(TestStr,1,Length(TestStr) - 1);
sl.Delimiter := '|'; //以|为分隔符来分割字符串
sl.DelimitedText := TestStr;
SetLength(StrArr,sl.Count);
for i := 0 to sl.Count - 1 do
StrArr[i] := sl.Strings[i];
for i := 0 to High(StrArr) do
ShowMessage(StrArr[i]);
finally
FreeAndNil(sl);
end;
end;
展开全部
用法
var
slReturnMin: TStringList;
sName: String;
begin
sName:= '40240|42180|42160|42160';
slReturn:= fucSplit(sName, '|');
end;
//将一个用指定符号分隔的字符串,拆开成子串列表
function fucSplit(sText, sMark: String): TStringList;
//将一个用指定符号分隔的字符串,拆开成子串列表
function fucSplit(sText, sMark:String): TStringList;
var
nPos, KeyStrLen: Integer;
SubStrList: TStringlist;
begin
try
SubStrList:= TStringlist.Create;
KeyStrLen:= Length(sMark);
while True do
begin
nPos:= Pos(sMark, sText);
if nPos>0 then
begin
SubStrList.Add(Copy(sText, 1, nPos-1));
sText:= Copy(sText, nPos+KeyStrLen, Length(sText));
end
else
begin
SubStrList.Add(sText);
Break;
end;
end;
//设置返回值
Result:= SubStrList;
except
Result:= nil;
end;
end;
var
slReturnMin: TStringList;
sName: String;
begin
sName:= '40240|42180|42160|42160';
slReturn:= fucSplit(sName, '|');
end;
//将一个用指定符号分隔的字符串,拆开成子串列表
function fucSplit(sText, sMark: String): TStringList;
//将一个用指定符号分隔的字符串,拆开成子串列表
function fucSplit(sText, sMark:String): TStringList;
var
nPos, KeyStrLen: Integer;
SubStrList: TStringlist;
begin
try
SubStrList:= TStringlist.Create;
KeyStrLen:= Length(sMark);
while True do
begin
nPos:= Pos(sMark, sText);
if nPos>0 then
begin
SubStrList.Add(Copy(sText, 1, nPos-1));
sText:= Copy(sText, nPos+KeyStrLen, Length(sText));
end
else
begin
SubStrList.Add(sText);
Break;
end;
end;
//设置返回值
Result:= SubStrList;
except
Result:= nil;
end;
end;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
function SplitString(const Source,ch:string):TStringList;
var
temp:String;
i:Integer;
begin
Result:=TStringList.Create;
if Source=''
then exit;
temp:=Source;
i:=pos(ch,Source);
while i<>0 do
begin
Result.add(copy(temp,0,i-1));
Delete(temp,1,i);
i:=pos(ch,temp);
end;
Result.add(temp);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
str:TStringList;
begin
str:= TStringList.Create ; //初始化
str:=SplitString('40240|42180|42160|...|60','|') ; //分割,参数1是要分割的数据,参数2是分割标识符
edit2.text:=str.Strings [0] ; //取成员文本str.Strings[0]就是40240,[1]是42180,以此类推!
showmessage(inttostr(str.Count)); //有几个成员,也就是一共分割了多少成员!
str.Free; //释放内存
end;
var
temp:String;
i:Integer;
begin
Result:=TStringList.Create;
if Source=''
then exit;
temp:=Source;
i:=pos(ch,Source);
while i<>0 do
begin
Result.add(copy(temp,0,i-1));
Delete(temp,1,i);
i:=pos(ch,temp);
end;
Result.add(temp);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
str:TStringList;
begin
str:= TStringList.Create ; //初始化
str:=SplitString('40240|42180|42160|...|60','|') ; //分割,参数1是要分割的数据,参数2是分割标识符
edit2.text:=str.Strings [0] ; //取成员文本str.Strings[0]就是40240,[1]是42180,以此类推!
showmessage(inttostr(str.Count)); //有几个成员,也就是一共分割了多少成员!
str.Free; //释放内存
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最适用方法
Procedure TForm1.BitBtn1Click(Sender: TObject);
Var
S: String;
I: Integer;
alist: TStringList;
Begin
//你的数据
S := '40240|42180|42160|42160|42160|42160|42100|';
alist := TStringList.Create;
Try
//加载数据
alist.Delimiter := '|';
alist.DelimitedText := S;
//处理数据
While alist.Count <> 0 Do
Begin
If TryStrToInt(alist[0], I) Then //依次转换为int
Begin
Application.MessageBox(PChar(Format('%d', [I])), '', 64);
//I:需要的数据 ,再组成数组(自己做)
End;
alist.Delete(0);
End;
Finally
alist.Clear;
alist.Free;
End;
End;
Procedure TForm1.BitBtn1Click(Sender: TObject);
Var
S: String;
I: Integer;
alist: TStringList;
Begin
//你的数据
S := '40240|42180|42160|42160|42160|42160|42100|';
alist := TStringList.Create;
Try
//加载数据
alist.Delimiter := '|';
alist.DelimitedText := S;
//处理数据
While alist.Count <> 0 Do
Begin
If TryStrToInt(alist[0], I) Then //依次转换为int
Begin
Application.MessageBox(PChar(Format('%d', [I])), '', 64);
//I:需要的数据 ,再组成数组(自己做)
End;
alist.Delete(0);
End;
Finally
alist.Clear;
alist.Free;
End;
End;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
晕,看了那么多答案,就HJ_3000的回答靠谱,没那么复杂,TStrings的自带功能就搞定了
procedure TForm1.Button1Click(Sender: TObject);
var
aStr: TStrings;
i: Integer;
begin
aStr:=TStringList.Create;
try
aStr.Delimiter:='|';
aStr.DelimitedText:=Memo1.Text;
for i:=0 to aStr.Count-1 do
ListBox1.Items.Add(aStr[i]);
finally
aStr.Destroy;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
aStr: TStrings;
i: Integer;
begin
aStr:=TStringList.Create;
try
aStr.Delimiter:='|';
aStr.DelimitedText:=Memo1.Text;
for i:=0 to aStr.Count-1 do
ListBox1.Items.Add(aStr[i]);
finally
aStr.Destroy;
end;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
疑问:“推荐答案”是怎么来的?谁推荐?
对于这个具体的问题,现在的“推荐答案”其实不是最好的,推荐它的理由是什么。要是从最简单、最适合初级程序员的角度看,HJ_3000给的答案最好,要是从执行效率来看,俺这个办法是最快。
program xxx;
{$APPTYPE CONSOLE}
uses SysUtils;
type
TIntArray = array of Integer;
function StringToIntArray(
const sSource : string;
var anResult : TIntArray
) : Integer;
const
CN_Delta = $400;
var
nArrayLength : Integer;
procedure CollectOne( sNumber : string );
begin
// 每次扩容1024个;第一次执行时,会暂设返回1024个,在主函数退出前,设置为准确的长度
if Result >= nArrayLength then
begin
Inc( nArrayLength, CN_Delta );
SetLength( anResult, nArrayLength );
end;
// 如果是合格的数儿,则采纳它,并且数组下标递增
if TryStrToInt( sNumber, anResult[ Result ] ) then
Inc( Result );
end;
var
i : Integer;
S : string;
begin
Result := 0;
nArrayLength := 0;
S := '';
for i := 1 to Length( sSource ) do
case sSource[i] of
'0'..'9':
begin
S := S + sSource[i];
end;
'|':
begin
CollectOne( S );
S := '';
end;
end;
// 一共收集到Result个合格的数儿,据此设置返回数组的准确长度
SetLength( anResult, Result );
end;
procedure testIt;
var
s : string;
n : Integer;
i : Integer;
anX : TIntArray;
begin
s := '40240|42180|42160|...|60|';
n := StringToIntArray( s, anX );
for i := 0 to n - 1 do
Writeln( anX[i] );
end;
begin
testIt;
end.
对于这个具体的问题,现在的“推荐答案”其实不是最好的,推荐它的理由是什么。要是从最简单、最适合初级程序员的角度看,HJ_3000给的答案最好,要是从执行效率来看,俺这个办法是最快。
program xxx;
{$APPTYPE CONSOLE}
uses SysUtils;
type
TIntArray = array of Integer;
function StringToIntArray(
const sSource : string;
var anResult : TIntArray
) : Integer;
const
CN_Delta = $400;
var
nArrayLength : Integer;
procedure CollectOne( sNumber : string );
begin
// 每次扩容1024个;第一次执行时,会暂设返回1024个,在主函数退出前,设置为准确的长度
if Result >= nArrayLength then
begin
Inc( nArrayLength, CN_Delta );
SetLength( anResult, nArrayLength );
end;
// 如果是合格的数儿,则采纳它,并且数组下标递增
if TryStrToInt( sNumber, anResult[ Result ] ) then
Inc( Result );
end;
var
i : Integer;
S : string;
begin
Result := 0;
nArrayLength := 0;
S := '';
for i := 1 to Length( sSource ) do
case sSource[i] of
'0'..'9':
begin
S := S + sSource[i];
end;
'|':
begin
CollectOne( S );
S := '';
end;
end;
// 一共收集到Result个合格的数儿,据此设置返回数组的准确长度
SetLength( anResult, Result );
end;
procedure testIt;
var
s : string;
n : Integer;
i : Integer;
anX : TIntArray;
begin
s := '40240|42180|42160|...|60|';
n := StringToIntArray( s, anX );
for i := 0 to n - 1 do
Writeln( anX[i] );
end;
begin
testIt;
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询