0

私はラザロで働いています。2 つの TStringList があり、それらを並べ替えた後、画面に表示します。しかし、順番が間違っています。それがどのように間違っていたのかを判断することは不可能です。

これは、TStringList がソートされていない場合のスクリーンショットです。

ここに画像の説明を入力

FMover.AList.Sort と FMover.BList.Sort を呼び出した後、それらを画面に表示します。これは、リストを並べ替えた後のスクリーンショットです。

ここに画像の説明を入力

'.../kam1.in' の前に項目 '.../kam14.in' が表示されていることがわかります。ソート手順が正しく機能していません。

これは、プログラムで使用される手順です。

procedure TAddProblemForm.actRegexLoadExecute(Sender: TObject);
var
  ARegExpr, BRegExpr: TRegExpr;
  s: String;
  AExpr, BExpr: String;
  Form: TRegexOptionForm;
begin
  Form := TRegexOptionForm.Create(Self);

  if Form.Execute('in', 'out') = mrOK then
  begin
    ARegExpr:=TRegExpr.Create;
    BRegExpr:=TRegExpr.Create;
    FMover.Clear;

    ARegExpr.Expression := Form.AExpr;
    BRegExpr.Expression := Form.BExpr;
    AddSearchResult(FMover.List, SearchDir, true);

    for s in FMover.List do
    begin
      if ARegExpr.Exec(s) then
        FMover.AList.Add(s)
      else if BRegExpr.Exec(s) then
        FMover.BList.Add(s);
    end;

    // *******************
    actInvalidate.Execute;
    FMover.AList.Sort;
    FMover.BList.Sort;
    actInvalidate.Execute;
    // *******************

    ARegExpr.Free;
    BRegExpr.Free;
  end;

  Form.Free;
end; 

そしてもう一つ

  procedure TAddProblemForm.actInvalidateExecute(Sender: TObject);
  var 
    s: String;
  begin
    ListBox1.Clear;
    ListBox2.Clear;

    for s in FMover.AList do
      ListBox1.Items.Add(s);

    for s in FMover.BList do
      ListBox2.Items.Add(s);

    Application.ProcessMessages;
  end;   
4

0 に答える 0