unit sortieren_main;

{$MODE Delphi}

interface

uses
  LCLIntf, LCLType, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, LConvEncoding;

type

  { TForm1 }

  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ListBox2: TListBox;
    ToggleBox1: TToggleBox;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ToggleBox1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const eingabe = 'test.txt';
      ausgabe = 'sort.txt';

var
  Form1: TForm1;
  datei : TStringList;

implementation

{$R *.lfm}

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  datei.LoadFromFile (eingabe);
  for i:=0 to datei.Count-1 do
    datei[i]:= CP1252toUTF8(datei[i]);
  //datei[i]:= CP850toUTF8(datei[i]);
  listbox1.Items.AddStrings (datei);
  Button2.enabled:= true;
  ToggleBox1.Enabled:= true;
  Button1.enabled:= false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  datei:= TStringList.Create;
end;

procedure TForm1.Button3Click(Sender: TObject);
var i: integer;
begin
  for i:=0 to datei.Count-1 do
    datei[i]:= UTF8toCP1252(datei[i]);
  //datei[i]:= UTF8toCP850(datei[i]);
  datei.SaveToFile (ausgabe);
  Button2.enabled:= true;
  Button3.enabled:= false;
end;

function myCompare(liste: TStringList; i1, i2: longint):longint;
var
  r, i, l, l1, l2: longint;
  c1, c2: byte;
  s1, s2: String;
begin
  s1:= liste[i1]; s2:= liste[i2];
  l1:= s1.Length; l2:= s2.Length;
  i:= 1; r:= 0;
  l:= l1; if l > l2 then l:= l2;
  while (r = 0) and (i <= l) do begin
    c1:= ORD(s1[i]); c2:= ORD(s2[i]);
    if c1 < c2 then r:= -1 else
    if c1 > c2 then r:= 1;
    inc(i);
  end;
  if r = 0 then begin
    if l1 < l2 then r:= -1 else
    if l1 > l2 then r:= 1;
  end;
  Result:= r;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 listbox2.clear;
 if ToggleBox1.Checked
    then datei.CustomSort (myCompare)
    else datei.Sort;
 listbox2.Items.AddStrings (datei);
 Button3.enabled:= true;
end;

procedure TForm1.ToggleBox1Click(Sender: TObject);
begin
  if ToggleBox1.Checked
     then ToggleBox1.Caption:='Eigener Sort aktiv'
     else ToggleBox1.Caption:='Eigener Sort';
end;

end.
