Перед выполнением корректировки пользователь должен увидеть содержимое файла и выбрать запись для корректировки, например, запомнив её порядковый (логический) номер.
Корректировка выполняется по технологии, схожей с технологией удаления записей. Открывается основной файл, и его записи переписываются в новый файл последовательным доступом. При этом каждая прочитанная запись контролируется – должна ли она быть скорректирована. Если нет, то она переписывается в новый файл. Если да, то не переписывается, а корректируется.
{ корректировка записей файла f1 }
...
reset(f1);
rewrite (F_temp);
Repeat
read(f1,zap);
if {запись не корректируется}
Then write (f_temp, zap)
else {запись корректируется}
Begin
{ 1. исх. запись zap копируется
в поле zap_corr}
{ 2. пользователь корректирует}
{ поля записи в zap_corr }
{ 3. затем у пользователя }
{ запрашивается подтверждение}
{ сделанной корректировки}
if { корректировка подтверждена }
then {в файл записываеся
Откорректированная
запись zap_corr }
Write (f_temp, zap_corr)
else {в файл записывается
|
|
исходная запись zap}
write (f_temp, zap);
end;
until eof(f1);
close(f1);
close (f_temp);
...
Пользователь должен подтвердить корректировку или отказаться от неё. Перед подтверждением пользователь должен увидеть тексты старой, исходной и новой, откорректированной записей. Только после этого он принимает решение о подтверждении сделанной корректировки или отказе от неё. Лучший вариант – возможность видеть одновременно и прежнее, и новое значения полей.
После закрытия файлов возможны следующие варианты:
а) старый файл уничтожается, а новый файл получает имя старого файла;
б) старый файл сохраняет прежнее имя, но получает новое расширение ~.BAK, а новый файл получает имя старого файла;
в) содержимое нового файла переписывается в старый файл, новый файл уничтожается.
Корректировка с использованием прямого доступа:
1) определяется корректируемая запись;
2) значение ключевого признака корректируемой записи преобразуется в номер физической записи в файле;
3) указатель записи позиционируется на искомую запись процедурой Seek (имя_файла_прогр, номер_записи);
4) искомая запись читается в оперативную память с использованием Read (имя_файла_прогр, поле_записи);
5) выполняется корректировка полей записи;
6) указатель вновь позиционируется (возвращается) на корректируемую запись процедурой
Seek (имя_файла_прогр, номер_записи);
либо
Seek (имя_файла_прогр, (FilePos (имя_файла_прогр) - 1);{возврат с текущей записи на предыдущую}
7) вывод откорректированной записи в файл на своё прежне место
Write (имя_файла_пр, поле_записи);
Внимание: здесь тоже необходимо подтверждать выполнение сделанной корректировки