Модуль в базе данных, перенос строки из одного файла в другой - Pascal ABC

Формулировка задачи:

Добрый вечер. Делаю свою первую базу данных на pascal , в ней есть функция архив . Архив - все записи которые мы удалили переносятся в новый файл . Так вот , у меня не получается в удалении перенести строчку n из файла a в файл b. Подскажите как это сделать .
procedure udalenie (var a:ft);
Var
             n,m:integer;
             i:integer;
             e:FIO;
begin
             clrscr;
             i:=1;
             reset(a);
             writeln ('Введите номер записи которую хотите удалить');
             readln(n);
             m:=filesize(a)-n;
             seek(a,n);
             while not eof(a) do
begin
             read (a,e);
             i:=i+1;
end;
             close (a);
             reset (a);
             seek (a,n-1);
             truncate (a);
             close (a);
             reset (a);
             seek (a,n-1);
             for i:=1 to m do
             write (a,e);
             writeln('0-выйти,любой символ-продолжить');
end;
Добавлено через 19 минут Очень нужно сделать это

Код к задаче: «Модуль в базе данных, перенос строки из одного файла в другой - Pascal ABC»

textual
procedure udalenie (var a, b: ft);
var n, i: longint;
    c: string;
    e: FIO;
begin
  repeat {цикл для удаления записей}
    {clrscr;} {эту строку считаю лишней}
    reset(a); {если файл до выполнения вызова процедуры уже открыт для чтения, эту строку можно удалить}
    reset(b); {аналогично предыдущему комментарию}
    if filesize(a) > 0 {проверяем, есть ли записи в файле}
      then begin {если записи в файле есть, действуем по плану}
        repeat {ввод номера записи с проверкой на существование}
          write('Введите номер записи, которую хотите удалить: ');
          readln(n);
          if (n < 1) or (n > filesize(a)) then writeln('Записи с таким номером нет, повторите ввод.')
        until (n >= 1) and (n <= filesize(a));
        seek(a, n - 1); {n - 1 потому, что нумерация записей в файле всегда начинается с 0}
        read(a, e); {читаем запись из файла}
        seek(b, filesize(b)); {позиция в архивном файле - за последней записью}
        write(b, e); {пишем (в конец файла)}
        seek(a, filesize(a) - 1); {позиционируем на последнюю запись - нужно для случая, если в файле только 1 запись}
        {цикл выполнится хотя бы 1 раз, если количество записей > 1}
        for i := n - 1 to filesize(a) - 2 do {существующая позиция в файле может быть в интервале 0..filesize(a) - 1}
          begin
            seek(a, i + 1); {позиционируем на позицию i+1}
            read(a, e); {читаем}
            seek(a, i); {позиционируем на позицию i}
            write(a, e) {пишем, заодно и стираем то, что там было}
          end;
        truncate(a); {усекаем последнюю запись файла}
      end
      else writeln('Файл не содержит записей, удалять нечего.'); {если записей в файле нет, печатаем сообщение}
    write('0 - выйти, любой символ - продолжить: ');
    readln(c);
  until c = '0'
end;

9   голосов, оценка 3.778 из 5


СОХРАНИТЬ ССЫЛКУ