Задача: В типизированном файле поменять местами две записи. То есть дан номер маршрута Marshrut.NK.N, количество остановок до метро Marshrut.NK.K. Надо найти маршрут 11 и поменять его местами со след записью. Вот часть кода име...

Задача: В типизированном файле поменять местами две записи. То есть дан номер маршрута 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;
Гость
Ответ(ы) на вопрос:
Гость
поясни по нормальней
Гость
Здесь нужно использовать вспомогательный типизированный файл и, соответственно, вторую файловую переменную (fr2). Сделать это можно так: 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;
Не нашли ответ?
Ответить на вопрос
Похожие вопросы