我们使用下面的代码对文件中的行进行排序。我在下面给出了输入行:
6 5 1 12 10
但我现在退出:
10 12 1 5 6
我需要
1 5 6 10 12
有没有办法对Inno Setup中的数字行进行排序。
procedure SortList(const FileName: string);
var
I: Integer;
Files: TStringList;
begin
Files := TStringList.Create;
try
Files.LoadFromFile(FileName);
for I := Files.Count - 1 downto 0 do
begin
Files.sort;
end;
Files.SaveToFile(FileName);
finally
Files.Free;
end;
end;
先谢谢。
答案 0 :(得分:4)
以下Quicksort proc应该完成这项工作:
//Start is the index of the first item on the list - usually 0
//Stop is the index of the last item of the list e.g. Count - 1
procedure QuickSort(var List: TStringList; Start, Stop: Integer);
var
Left: Integer;
Right: Integer;
Mid: Integer;
Pivot: integer;
Temp: integer;
begin
Left := Start;
Right := Stop;
Mid := (Start + Stop) div 2;
Pivot := StrToInt(List[mid]);
repeat
while StrToInt(List[Left]) < Pivot do Inc(Left);
while Pivot < StrToInt(List[Right]) do Dec(Right);
if Left <= Right then
begin
Temp := StrToInt(List[Left]);
List[Left] := List[Right]; // Swops the two Strings
List[Right] := IntToStr(Temp);
Inc(Left);
Dec(Right);
end;
until Left > Right;
if Start < Right then QuickSort(List, Start, Right); // Uses
if Left < Stop then QuickSort(List, Left, Stop); // Recursion
end;
而不是打电话:
Files.sort;
使用以下内容:
QuickSort(Files, 0, Files.Count - 1);
有一点需要注意,文件内容必须始终为有效整数,因为我没有为其他情况添加错误处理。
我使用的Quicksort功能是在Torry的Delpi中找到的修改版本:http://www.swissdelphicenter.ch/torry/showcode.php?id=1916