:в типизированном файле поменять местами две записи. то есть дан номер маршрута marshrut.nk.n, количество остановок до метро marshrut.nk.k. надо найти маршрут 11 и поменять его местами со след записью. вот часть кода именной этой процедуры, с сортировкой т.к. та, которая написана ниже не робит. var marshrut, y: tmarshrut; vidtransporta: tvidtransporta; fr: file of tmarshrut; n, kol, k: integer; filename: string[80]; begin while not eof(fr) and (kol=0) do begin read(fr, marshrut); if (marshrut.nk.n = '11') then begin writeln('маршрут: ',marshrut.nk.n, ' количество остановок до метро: ',marshrut.nk.k); inc(kol); k: =filepos(fr)-1; y: =filepos(fr); seek (fr, 0); write (fr, y); seek (fr, 1); write (fr, k); write('в файле изменена запись номер', k+1); write(fr, marshrut); end; end; if kol=0 then writeln('данные, соответствующие запросу, не найдены'); closefile(fr); write('press enter'); readln; end;
Сделать это можно так:
while not eof(fr) and (kol=0) do
begin
read(fr, Marshrut);
if (Marshrut.NK.N <> '11')
then write(fr2,Marshrut)
else begin inc(kol); y:=Marshrut; end;
end;
if not eof(fr) then
begin
read(fr, Marshrut);
write(fr2,Marshrut);
end;
if (kol=1) then write(fr2,y);
Дальше нужно просто переписать оставшиеся записи из первого файла во второй. Затем оба файла закрыть, первый файл удалить, а второй переименовать (т.е. назвать его так, как назывался первый файл).
Попробуйте ещё вот такой вариант:
(здесь k1 и k2 - целые, а y - типа )
if (Marshrut.NK.N = '11') then
begin
writeln('... ');
inc(kol);
y:=Marshrut;
k1:=FilePos(fr)-1;
k2:=FilePos(fr);
if not eof(fr) then
begin
read(fr, Marshrut);
seek (fr, k1);
write(fr, Marshrut);
seek (fr, k2);
write (fr, y);
end;
end;