[Back to SORTING SWAG index]  [Back to Main SWAG index]  [Original]

{
---------------------------------------------------------------------------
 >    What I want to do here, is take a textfile with about 1,000-10,000
 > lines in it, go and read a string starting at the XPosition of 13, going
 > until XPosition of 38 on each line of the textfile.  Then, put
 > everything in memory if possible, and then sort all of the strings on
 > the screen by ABC order.  Can somebody help me out with a few hints, or
 > some code?  Either reply here, or send me Netmail @ 1:105/60.77.
This will take some modification by you, but it should not be too much trouble.
 This is a sort based on a file of records, but the necessary modifications
should not be too difficult.}

{$N+,E+}
program DiskSort;
uses
    Crt,
    Dos;
type
    String72 = string[72];
    ElementType = String72;
    ElementFile = file of ElementType;
var
    A : ElementFile;
    Temp : String72;
    I : LongInt;
function Precedes (A, B : ElementType) : boolean;
    begin {Precedes}
        if A < B then
            Precedes := True
        else
            Precedes := False;
    end; {Precedes}
procedure Swap (var A : ElementFile; Index1, Index2 : Integer; Temp1, Temp2 :
ElementType);
    begin {Swap}
        Seek (A, Index1);
        Write (A, Temp2);
        Seek (A, Index2);
        Write (A, Temp1);
    end; {Swap}
procedure ShellSortInsertion (var A : ElementFile; NumVals : Integer);
var
    EleDist : Integer;
    Temp1, Temp2 : ElementType;
    procedure SegmentedInsertion (var A : ElementFile; N, K : Integer);
    var
        J, L : Integer;
    begin {SegmentedInsertion}
        for L := K + 1 to N do
            begin
                J := L - K;
                while J > 0 do
                    begin
                        Seek (A, J+K-1);
                        Read (A, Temp1);
                        Seek (A, J-1);
                        Read (A, Temp2);
                        if Precedes (Temp1, Temp2) then
                            begin
                                Swap (A, J+K-1, J-1, Temp1, Temp2);
                                J := J - K;
                            end
                        else
                            J := 0;
                    end;
            end;
    end; {SegmentedInsertion}
begin {ShellSortInsertion}
    EleDist :=  NumVals div 2;
    while EleDist > 0 do
        begin
            SegmentedInsertion (A, NumVals, EleDist);
            EleDist := EleDist div 2;
        end;
end; {ShellSortInsertion}
begin
    ClrScr;
    Assign (A, 'Strings.dat');
    Reset (A);

    ShellSortInsertion (A, FileSize(A));

end.

[Back to SORTING SWAG index]  [Back to Main SWAG index]  [Original]