procedure SplitCommaCross(aList: TStrings);
procedure SPlitCross(aList: TStrings);
var
LList: TStrings;
a,b: Integer;
i: Integer;
begin
if Pos('-', aList.Text) < 2 then Exit;
LList := TStringList.Create;
ExtractStrings(['-'], [' '], PChar(aList.Text), LList);
if LList.Count = 2 then
begin
aList.Clear;
a := StrToIntDef(LList[0], 0);
b := StrToIntDef(LList[1], -1);
for i := a to b do aList.Add(IntToStr(i));
end;
LList.Free;
end;
var
LList,RList: TStrings;
s: string;
begin
aList.CommaText := Trim(aList.Text);
LList := TStringList.Create;
RList := TStringList.Create;
for s in aList do
begin
LList.Text := Trim(s);
SPlitCross(LList);
RList.AddStrings(LList);
end;
aList.Assign(RList);
LList.Free;
RList.Free;
end;
//测试
var
str: string;
List: TStrings;
begin
str := '1-3,5-6,8';
List := TStringList.Create;
List.Text := Trim(str);
SplitCommaCross(List);
ShowMessage(List.Text); //1 2 3 5 6 8
List.Free;
end;