在Inno Setup中对数字数组进行排序

时间:2013-11-08 09:11:51

标签: inno-setup

我们使用下面的代码对文件中的行进行排序。我在下面给出了输入行:

  

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;

先谢谢。

1 个答案:

答案 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