home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
ENTERPRS
/
CPM
/
UTILS
/
S
/
TPASPGM.ARC
/
SORTTEXT.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1989-09-27
|
4KB
|
126 lines
PROGRAM SORTTEXT ;
{ This program sorts a text file. Each sort element must be
a standard text file line, ending with a carriage-return
and line-feed. Maximum line length is 80, including the
<cr> & <lf>. Maximum number of lines is set by MAXLINES.
WPM -- 7/31/84 }
{$V- Turn off strict type checking for string length }
CONST
MAXLINES = 499 ;
TYPE
STR80 = STRING[80] ;
FILENAME = STRING[14] ;
LINE_ARRAY = ARRAY[0 .. MAXLINES] OF STR80 ;
VAR
IPT_NAME : FILENAME ;
OUT_NAME : FILENAME ;
IPT_FILE : TEXT ;
OUT_FILE : TEXT ;
LINES : LINE_ARRAY ;
N : INTEGER ;
NUM_LINES : INTEGER ;
{ ------------------------------------------------------------------ }
PROCEDURE SORT_EM ;
{ Sort the array using Shell sort }
VAR
D : INTEGER ; { Distance between elements }
N,M : INTEGER ;
SORTED : BOOLEAN ;
SWAP : STR80 ;
BEGIN
WRITELN ('Sorting') ;
D := NUM_LINES DIV 2 ;
WHILE D > 0 DO
BEGIN
WRITE ('+') ; { To show something happening }
REPEAT
SORTED := TRUE ;
FOR N := 0 TO NUM_LINES - D DO
BEGIN
M := N + D ;
IF LINES[N] > LINES[M] THEN
BEGIN
SWAP := LINES[M] ;
LINES[M] := LINES[N] ;
LINES[N] := SWAP ;
SORTED := FALSE
END
END
UNTIL SORTED ;
D := D DIV 2
END ; { WHILE }
WRITELN ;
END ; { --- Procedure SORT_EM --- }
BEGIN { --- MAIN -------------------------------------------------- }
WRITELN ;
WRITELN ('This program sorts a text file.') ;
WRITELN ;
WRITE (' Input file? (d:filename.ext) ') ;
READLN (IPT_NAME) ;
WRITE ('Output file? (d:filename.ext) ') ;
READLN (OUT_NAME) ;
IF IPT_NAME = OUT_NAME THEN
BEGIN
WRITELN ('Must be different file names.', CHR(7)) ;
HALT
END ;
ASSIGN (IPT_FILE, IPT_NAME) ;
ASSIGN (OUT_FILE, OUT_NAME) ;
{$I-} { Turn off auto I/O check }
RESET (IPT_FILE) ;
IF NOT (IORESULT = 0) THEN
BEGIN
WRITELN (' Can''t find file ',IPT_NAME, CHR(7)) ;
HALT
END ;
REWRITE (OUT_FILE) ;
IF NOT (IORESULT = 0) THEN
BEGIN
WRITELN ('Can''t create file ',OUT_NAME) ;
WRITELN ('Maybe the directory is full.', CHR(7)) ;
HALT
END ;
{$I+} { Turn it back on }
N := 0 ;
WHILE NOT(EOF(IPT_FILE)) DO
BEGIN
READLN (IPT_FILE, LINES[N]) ;
IF NOT (LINES[N] = '') THEN
N := N + 1 ;
IF N > MAXLINES THEN
BEGIN
WRITELN ('Too many lines in input file -- max is ',MAXLINES + 1) ;
HALT ;
END
END ;
NUM_LINES := N - 1 ;
SORT_EM ;
{$I-} { Turn off auto I/O check }
FOR N := 0 TO NUM_LINES DO
BEGIN
WRITELN (OUT_FILE, LINES[N]) ;
IF NOT (IORESULT = 0) THEN
BEGIN
WRITELN ('Can''t write file ', OUT_NAME) ;
WRITELN ('Maybe the disk is full.', CHR(7)) ;
HALT
END
END ;
{$I+} { Turn it back on }
CLOSE (IPT_FILE) ;
CLOSE (OUT_FILE) ;
WRITELN ('Done!', CHR(7))
END.
{ Turn it back on }
N := 0 ;
WHILE NOT(EOF(IPT_FILE)) DO
BEGIN
READLN (IPT_F