Dec 242017
Vern Buerg's excellent SORTF program reads record data from a file, sorts the records, and writes the data to another file.
File SORTF237.ZIP from The Programmer’s Corner in
Category Word Processors
Vern Buerg’s excellent SORTF program reads record data from a file, sorts the records, and writes the data to another file.
File Name File Size Zip Size Zip Type
SORTF.COM 3235 2308 deflated
SORTF.DOC 12753 4025 deflated
SORTF.OBJ 4056 3134 deflated

Download File SORTF237.ZIP Here

Contents of the SORTF.DOC file

SORTF File Sorting Utility

Version 2.37 - Sep 20, 1991


Purpose ................................... 1
Format ................................... 1
Remarks ...................................1

Options summary ........................... 2
Invoking from Quick Basic................... 3

Examples .................................. 4

Version history ........................... 5

Usage restrictions ........................ 6

Copyright (c) Vernon D. Buerg 1985-90. ALL RIGHTS RESERVED.

SORTF Command Version 2.37 Page 1
------------- Sep 20, 1991

Purpose: The SORTF program reads record data from a file, sorts the
records, and writes the data to another file.

SORTF [d:][path]fname[.ext] [d:][path]fname[.ext]
[/+nnnn[,len]] -or- [/-nnnn,[len]]
[/R] [/C] [/Q]
[/K] or [/X]

Remarks: Records are read from the input file, sorted, and written
to the output file.

Two types of records may be sorted:

1) logical records. Each record ends with a carriage
| return and line feed, and may be up to 8192 characters
in length.

2) fixed length records. Each record is of length L as
defined by the '/Lnnnn' parameter. The records may
contain any kind of data, including carriage return,
line feed, and end-of-file without effecting the record
| length. The maximum record is 8192 bytes.

The sort order is in ascending ASCII character sequence.
You may supply the /R parameter to reverse the sort order
for all fields, or supply /- parameters for each key field
to be sorted in reverse order. The key fields are
processed from left to right as supplied in the command

The /C option may be added to cause SORTF to treat the key
fields as case insensitive data. That is, lower case
letters in the key field are treated as upper case letters.

You may supply up to sixteen key offsets and lengths by
using the /+ or /- parameter, one for each key position and
its length. If /+ and /- are omitted, the key is taken
from the first character position for a length of 11.

| The position 'nnnn' may be a value from one to 8192.

| The key length 'len' may be a value from 1 to 8192. The /+
operand specifies that the specified key is sorted in
ascending order. The /- specifies desending sort order for
that key.

Use the /Q option to suppress the display of informational
messages. Error messages can not be suppressed.

SORTF Command OPTIONS SUMMARY Version 2.37 Page 2
------------- Sep 20, 1991

/C specifies that the keys are case insensitive; if
supplied, all lower case characters in the key fields
are converted to upper case for the purposes of

/R sort in reverse order; over-rides any /- options and
treats them all as /+ options.

/Q suppress informational messages.

/K creates an output file that consists of sorted key data
which includes a 5-byte information prefix.

/X like /K, except that the 5-byte information prefix is
omitted, and a cr/lf (carriage return and line feed)
is added to each record.

/L specifies the sorting of fixed length records

/+ defines the location and length of a key field to be
sorted in ascending order

/- defines the location and length of a key field to be
sorted in descending order

------------- Sep 20, 1991

To invoke SORTF from a Quick Basic program, you can use either
the SHELL or CALL statements. Use of SHELL is straightforward.

Use of CALL requires that you include SORTF.OBJ when you LINK
your QB program.

You need to make memory available to SORTF from your QB
program. For QB version 3 and earlier, you can use the LINK
'/CP:nnnn' option. For QB 4 and later, I don't know how you
release memory. For BC 7, you can use the SETMEM function.

In the QB program : CALL SORTF ("test.fil new.fil /+1,12")
-or- SHELL "sortf test.fil new.fil /+1,12"

For CALL: LINK qbprogram + SORTF /CP:5000;

The /CP:5000 option will limit the QB program to 80K plus the
size of its code, data and stack. Whatever is left can be used
by CALLed programs. That amount will be about 120K less than
the DOS available memory.

For BC 7, here's an example of using SETMEM to release memory:

M1&=Setmem(0) ' Get heap size
M2&=Setmem(-M1&+128000) ' Release all but 128k
Call SORTF (" "+infile$+" "+outfile+" /options")
M3&=Setmem(M1&) ' Re-allocate all to heap

SORTF Command EXAMPLES Version 2.37 Page 4
------------- Sep 20, 1991

o to sort a file in descending order with the keys in
position 10:


o to sort the same file using keys with 24 characters:


o to sort a file of fixed length, binary records; the input
file contains records of 18 bytes each, the key is two
bytes at position 17 in each record in descending
order, and 11 bytes at postion 1 in ascending order:


o to sort on different keys, but creating an an output file
with the keys only:

SORTF TEST.DAT TEST.KEYS /-10,2 /+20,4 /-16,3 /K

Note the use of /-. It specifies that the first and third
keys are sorted in descending order, the second key is
sorted in ascending order.

The format of the keys-only file using /K is:

Offset Length Contents
------ ------ ------------------------------------------
0 2 Length of data record excluding CR and LF
2 3 Offset to record in input file
+0 hi-byte of 3-byte address offset
+1 low word of address offset
5 n Variable key data, depends on key definitions

The format of the keys-only file using /X is:

Offset Length Contents
------ ------ ------------------------------------------
0 n Variable key data, depends on key definitions
n 2 Carriage return and line feed

In the example above, the variable key data format is:

5 2 Data in records at offset 10
7 4 Data in records at offset 20

11 3 Data in records at offset 16
14 0 End of key record.

The length of each keys-only record is 5 plus the sum of
the individual key lengths. The default, if no /+ or /- is
specified, is 16 bytes each.

SORTF Command VERSION HISTORY Version 2.37 Page 5
------------- Sep 20, 1991

2.0, July 11, 1985. Corrects CR/LF problem.

2.1, August 3, 1985. Corrects a problem sorting files larger than 64K.

2.15, Dec 27, 1985. Corrects problems with first record of file.
Adds /C option to treat keys as case insensitive data
The key length may be specified on the command line

2.17, Feb 25, 1987. Correct problem when maximum records exceeded
Convert to COM program

2.20, June 28, 1987. Add /Q option to suppress informational messages
Change to allow up to 16 key field specifications

2.23, Aug 6, 1987. Add "-" option to sort individual fields in reverse order
Add /K option to produce output file with keys only

2.24, Sep 15, 1987. Add /Lnnn option for sorting fixed length records

2.25, Sep 19, 1987. Correction for /L dropping last char of file and fouling

2.26, Dec 16, 1987. Cosmetic changes

2.27, Feb 1, 1988. Fix divide overflow on large files; terminate with
message "Maximum records exceeded"

2.29, March 5, 1988. Release gotten memory
Add SORTF entry point for CALL from Quick Basic

2.30, May 23, 1988. Change maximum record size from 255 to 1023
Change default key length from 12 to 11

2.31, Feb 16, 1989. Add /X option like /K to write file with keys only,
and a cr/lf at the end of each record.

2.32, Feb 18, 1989. Correct problem LINKing with QB 4.5
2.33, Mar 16, 1989. Expand record size limit from 1024 to 8192 bytes.
2.34, Feb 8, 1990. Allow command line numbers to exceed 2 digits.
Correct collation of multiple keys.
2.35, Feb 15, 1990. Correct use of /K with record lengths over 255 bytes
Allow records to be terminated by CR-LF, just CR,
or just LF line feed.
|2.36, Sep 18, 1991. Correct problem with files over 16k records.
|2.37, Sep 20, 1991. Improve speed for ascending sorts

SORTF Command RESTRICTIONS Version 2.37 Page 6
------------- Sep 20, 1991

Depending on the amount of memory available, up to 40000
records may be sorted. The maximum file size that can be
sorted depends on the maximum number of records and the
average record length. For example, the file size is
limited to 3.2 mb for a file consisting of 80-byte records.

The advantages of using SORTF instead of the SORT filter:
- files larger than 63K may be sorted
- less time is required
- sort order can be based on up to 16 fields
- fixed length files can be sorted

For best results, place the input file on the fastest
available drive, e.g. RAM disk.

Written by Vernon Buerg for the IBM PC using DOS 2.0 or
later. You may distribute SORTF given these restrictions:

o the program shall be supplied in its original, unmodified
form, which includes this documentation;

o no fee is charged;

o for-profit use without a license is prohibited;

o the program may not be included, or bundled, with other
goods or services. Exceptions may be granted upon
written request only. This also applies to clubs and

For use by corporations and other institutions, contact me
for a licensing agreement.

If you find SORTF useful, your gift of $15, or any amount,
would be greatly appreciated.

Vernon D. Buerg
139 White Oak Circle
Petaluma, CA 94952

Data: (707) 778-8944, 24-hour BBS
CompuServe: 70007,1212 (Go IBMSYS)

 December 24, 2017  Add comments

Leave a Reply