У меня есть типизированный файл с записями
И я хочу отсортировать записи по ключевому признаку (табельному номеру)
Z - динамически массив только из таб номеров
t:=filesize(f2);
getmem(Z,t*sizeof(integer));
k:=0;
while not (eof(f2)) do
begin
read(f2,zap);
inc(k);
Z^[k]:=zap.tn;
end; close(f2);
for j:=1 to k-1 do
for i:=1 to k-j do
if z^[i]>z^[i+1] then
begin
а дальше не знаю: как переставлять записи в файле??? только не пользуйтесь пожалуйста прямым доступом!!
Для того, чтобы отсортировать массив записей - совершенно не обязательно работать с доп. массивом только таб. номеров. Можно работать и с массивом записей:
t:=filesize(f2);
getmem(Z,t*sizeof(zap));
k:=0;
while not (eof(f2)) do begin
read(f2,zap); inc(k); Z^[k]:=zap;
end;
close(f2);
for j:=1 to k-1 do
for i:=1 to k-j do
if z^[i].tn>z^[i+1].tn then { менять местами запись z^[i] с записью z^[i + 1] }
хм....а как??
я так сделала
for j:=1 to k-1 do
for i:=1 to k-j do
if z^[i].tn>z^[i+1].tn then
begin
c:=z^[i];
z^[i]:=z^[i+1];
z^[i+1]:=c;
end;
rewrite(f2);
i:=1;
while not (eof(f2)) do
begin
read(Z^[i]);
write(f2,z^[i]);
inc(i);
end;
У тебя так ничего не получится - после Rewrite сразу будет найден конец файла... Вот так:
// Здесь - сортировка
rewrite(f2);
for i := 1 to T do { T это то, что было filesize(f2) }
write(f2,z^[i]);
close(f2);