Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка записей
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-Екатерина-
У меня есть типизированный файл с записями
И я хочу отсортировать записи по ключевому признаку (табельному номеру)
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);
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.