[Back to SORTING SWAG index] [Back to Main SWAG index] [Original]
{
From: BOB SWART
Subj: Sorting...
---------------------------------------------------------------------------
Does anyone know of a VERY fast way to sort something? I would
really like to view some source code on this if possible. I need to
sort over 1200 strings, and do it rather quickly.
Try this, it uses a TStringCollection...
}
{$IFDEF VER70}
{$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S+,T-,V-,X-}
{$ELSE}
{$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S+,V-,X-}
{$ENDIF}
{$M 16384,0,655360}
{
Sorteer 3.0
Borland Pascal (Objects) 7.0.
Copr. (c) 9-29-1993 DwarFools & Consultancy drs. Robert E. Swart
P.O. box 799
5702 NP Helmond
The Netherlands
Code size: 5824 Bytes
Data size: 1254 Bytes
.EXE size: 4971 Bytes
----------------------------------------------------------------
Authors: Bob Swart (2:281/256.12)
Hans van der Veeke (2:282/517.2)
}
uses {$IFDEF WINDOWS}
WinCrt,
{$ENDIF}
Objects;
Type
PStr = ^TStr;
TStr = object(TObject)
StrName: PString;
constructor Init(_StrName: String);
end {TStr};
constructor TStr.Init(_StrName: String);
begin
TObject.Init;
StrName := NewStr(_StrName)
end {Init};
Type
PStrColl = ^TStrColl;
TStrColl = object(TStringCollection)
function KeyOf(Item: Pointer): Pointer; virtual;
end {TStrColl};
function TStrColl.KeyOf(Item: Pointer): Pointer;
begin
KeyOf := PStr(Item)^.StrName
end {KeyOf};
var StrColl: PStrColl;
Line: String;
F: Text;
begin
writeln('Sorteer - Sort strings (c) 1993 by Bob Swart & Hans van der Veeke.'#13#10);
if ParamCount = 0 then
begin
writeln('Usage: Sorteer [ASCII file to be sorted]');
Halt(0)
end;
Assign(F,ParamStr(1));
reset(F);
if IOResult <> 0 then
begin
writeln('Error - could not open file ',ParamStr(1));
Halt(1)
end;
StrColl := New(PStrColl,Init(1000,500));
StrColl^.Duplicates := True; { make False for NO duplicates }
while not Eof(F) do
begin
readln(F,Line);
if Length(Line) > 0 then StrColl^.Insert(New(PStr, Init(Line)))
end;
Close(F);
while StrColl^.Count > 0 do
begin
writeln(PStr(StrColl^.At(0))^.StrName^); { print first element }
StrColl^.AtFree(0); { delete and dispose first element StrColl }
end
end.
[Back to SORTING SWAG index] [Back to Main SWAG index] [Original]