Delphi怎么将TStringList按照分割符‘end’分割成多个TStringList
List:TStringList;List:=TStringList.Create;List.add('task');List.add('A');List.add('A'...
List:TStringList;
List:= TStringList.Create;
List.add('task');
List.add('A');
List.add('A');
List.add('end');
List.add('task');
List.add('b');
List.add('b');
List.add('end');
List.add('task');
List.add('c');
List.add('c');
List.add('end');
要得到输出结果是List1里保存A的值,List2里保存b的值,List3里保存c的值。 展开
List:= TStringList.Create;
List.add('task');
List.add('A');
List.add('A');
List.add('end');
List.add('task');
List.add('b');
List.add('b');
List.add('end');
List.add('task');
List.add('c');
List.add('c');
List.add('end');
要得到输出结果是List1里保存A的值,List2里保存b的值,List3里保存c的值。 展开
1个回答
展开全部
用TObjectList管理分割后的StringList(替代List1,2,3),循环List,和end比较(用了不分大小写的CompareText,否则用CompareString),下面是测试代码,注意:TObjectList需要Uses Contnrs。
uses
Classes, SysUtils, Contnrs
...
var
ErrorMsg: String;
List: TStringList;
objList: TObjectList;
i : Integer;
flag_addnew : Boolean;
begin
objList := TObjectList.Create;
List:= TStringList.Create;
try
List.add('task');
List.add('A');
List.add('A');
List.add('end');
List.add('task');
List.add('b');
List.add('b');
List.add('end');
List.add('task');
List.add('c');
List.add('c');
List.add('end');
writeln('Total count: '+IntToStr(List.Count));
writeln(List.Text);
flag_addnew := true;
for i := 0 to List.Count-1 do
begin
if CompareText(List[i], 'end') <> 0 then
begin
if flag_addnew then
begin
objList.Add(TStringList.Create);
flag_addnew := false;
end;
TStringList(objList[objList.Count-1]).Add(List[i]);
end
else
flag_addnew := true;
end;
for i := 0 to objList.Count-1 do
begin
writeln('------ '+ IntToStr(i+1) + ' ------');
writeln(TStringList(objList[i]).Text);
end;
finally
List.Free;
objList.Free;
end;
end;
输出:
------ 1 ------
task
A
A
------ 2 ------
task
b
b
------ 3 ------
task
c
c
更多追问追答
追问
谢谢回答,思路我看懂了,但能不能把这段代码注释一下呢?
追答
flag_addnew := true; // 设置一个标志,true = 创建TStringList,并添加到TObjectList中
for i := 0 to List.Count-1 do //大循环,读取开始的TStringList中的字符串
begin
// 是否读取到分隔符字符串'end'
if CompareText(List[i], 'end') <> 0 then
begin
// 如果读取的不是'end', 看是否需要创建新的TStringList并加入TObjectList中
// 一开始标志是true,就是要创建,后面除非出现'end',否则都只要在当前
// TObjectList所对应的TStringList中添加字符串
if flag_addnew then
begin
objList.Add(TStringList.Create);
flag_addnew := false;
end;
TStringList(objList[objList.Count-1]).Add(List[i]);
end
else
// 读取的是字符串'end',不要添加到TObjectList所对应的TStringList中,
// 但需要设置标准=true,这样下一个循环的是,就可创建新的StringList并添加
// 到ObjectList中。
flag_addnew := true;
end;
// 循环读取TObjectList中的内容,每个object都是一个TStringList
for i := 0 to objList.Count-1 do
begin
writeln('------ '+ IntToStr(i+1) + ' ------');
writeln(TStringList(objList[i]).Text);
end;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询