home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
mbug
/
mbug027.arc
/
SORT.INC
< prev
next >
Wrap
Text File
|
1979-12-31
|
2KB
|
85 lines
overlay PROCEDURE sort_file;
CONST
Max_N = 1000;
TYPE
Animal_sort = RECORD
rec_no : INTEGER;
Ear_No : str5;
END;
arraytype = ARRAY[1..Max_N] OF Animal_sort;
VAR
Ch : CHAR;
k,i : INTEGER;
Old_File,
New_File,
test : FILE OF Animal_rec;
x : arraytype;
Animal : Animal_rec;
found : BOOLEAN;
ear : str5;
ptr : INTEGER;
PROCEDURE bubble(VAR x : arraytype);
VAR
pass,n,j : INTEGER;
intchange : BOOLEAN;
hold : Animal_sort;
BEGIN
intchange := TRUE;
pass := 1;
n := filesize(Old_File);
WHILE (pass <= n-1) AND (intchange) DO
BEGIN
intchange := FALSE;
FOR j := 1 TO n - pass DO
IF x[j].ear_no > x[j+1].ear_no THEN
BEGIN
intchange := TRUE;
hold := x[j];
x[j] := x[j+1];
x[j+1] := hold;
END;
pass := pass + 1;
END;
END;
BEGIN (* MAIN *)
ASSIGN(old_file,InFileName +'.DAT');
ASSIGN(new_file,'SORTED.DAT');
RESET(old_file);
REWRITE(new_file);
k := 0;
REPEAT
Read(Old_File,Animal);
k := k + 1;
x[k].rec_no := k -1;
x[k].ear_no := Animal.ear_no;
UNTIL EOF(Old_File) OR (k = Max_N);
bubble(x);
RESET(Old_File);
ptr := 0;
FOR i := 1 TO k DO
BEGIN
seek(Old_File,x[i].rec_no );
Read(Old_File,Animal);
IF Animal.Ear_No <> 'CLEAR' THEN
BEGIN
Animal.rec_no := ptr;
Write(New_File,Animal);
ptr := ptr + 1;
END;
END;
close(old_file);
close(new_file);
ASSIGN(test,InFileName +'.BAK');
IF EXIST(InFileName +'.BAK') THEN erase(test);
rename(old_file,InFileName +'.BAK');
rename(new_file,InFileName +'.DAT');
ASSIGN(Old_File,InFileName +'.DAT');
RESET(Old_File);
FOR i := 1 TO 6 DO Animal_table[i].ear_no := '';
f_table;
END;