Упорядочение записей в файле. Эта операция выполняется довольно часто. Здесь возможны два разных подхода: 1) Записи из файла можно переписать в массив, упорядочить их там, а потом переписать этот массив в исходный файл; 2) Информация упорядочивается непосредственно в наборе данных. При значительном размере файла первый метод потребует большого объема памяти. Затраты оперативной памяти у второго подхода минимальны, но по быстродействию он проигрывает первому.
Удаление записей из файла. Эта операция может быть двух типов: а) логическое удаление;
б) физическое удаление. При логическом удалении запись фактически не удаляется. Вместо этого используется специальный признак: активная/пассивная запись. Логическое удаление – установка признака в состояние "пассивная". При этом запись не стирается. Во время обработки файла проверяется признак, и обрабатываются только активные записи. При физическом удалении записи на ее место переписывается новая информация, т.е. запись стирается. Эта операция выполняется по схеме, приведенной на рисунке, где показано удаление записи с номером 1.
Составим процедуру удаления записи с заданным номером Num из файла f. Нужно учесть, что удаление сводится к переписи записей после номера Num на 1 место вперед. После переписи (или если для удаления сразу была назначена последняя запись), файл нужно урезать с помощью процедуры Truncate и таким образом убрать из него последнюю запись. Напомним, что после выполнения операций записи/чтения текущая позиция в файле перемещается к следующему элементу.
Вставка записей в файл. Эта операция предполагает увеличение размеров набора данных и перемещение признака End Of File. В большинстве случаев новую запись допустимо поместить в конец набора данных, а потом новый набор можно, например, отсортировать. Для добавления записей в конец текстового файла служит процедура Append, описанная в начале этого раздела. Для добавления записей в конец типизированного файла, необходимо установить текущую позицию в файле перед местом, куда будет помещена новая запись. Это удобно сделать, вызвав процедуру Seek следующим образом:
Seek(файл, FileSize(файл)),
где FileSize(файл) – функция, возвращающая текущий размер файла в элементах его записей (он не должен быть текстовым). Другими словами, эта функция возвращает число, на единицу большее номера последней записи в файле.
Если необходимо добавить запись куда-нибудь в середину типизированного файла, то можно воспользоваться следующим алгоритмом.
1. Ввести номер (Num) записи, после которой должна быть вставлена новая.
2. Переписать все записи файла, начиная с номера (Num+1), на одну позицию к концу файла.
3. Записать в файл новую запись по номеру (Num+1).
4. Установить текущую позицию в файле после последней записи в нем и закрыть файл.