Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
opis_tip_file.doc
Скачиваний:
17
Добавлен:
19.08.2019
Размер:
164.86 Кб
Скачать
    1. У даление записи без использования дополнительного файла.

Рисунок, поясняющий физическое удаление записи без использования дополнительного файла:

А) Б) Fn - f

1

2

3

4

4

5

5

6

6

7

7

1

2

3

4

4

5

6


3

К=3

Начало 1 4

Начало ->

2

2 записи ->

А) сдвиг одной записи Б) сдвиг всех записей

пояснения к выполнению

    1. Установка файлового указателя на 4-ой записи

    2. Чтение 4-ой записи

    3. Установка файлового указателя на 3-ей (удаляемой) записи.

    4. Запись 4-ой записи на 3-ю запись.

В результате 3-я запись удалена, т.е. на месте старой информации находится новая информация, которая была на записи 4, и мы имеем на 3 и 4 записи месте будут две одинаковые информации.

Словесный алгоритм

  1. Отрываем файл f на режим работы ‘чтение/запись’.

  2. Определяем число записей N в файле f.

  3. Вводим номер записи K, которую надо удалить.

  4. i=0.

  5. Устанавливаем файловый указатель на (K+i) запись.

  6. Читаем К+i-ую запись. (После чтения файловый указатель перемещается на одну запись ниже по файлу).

  7. Устанавливаем файловый указатель на К+i-1-ой записи (минус 2 записи вверх от текущего положения указателя),

  8. Записываем в файл прочитанную ранее запись (см. п. 6 ).

  9. i=i+1

  10. Проверяем K+i=N:

  • Если K+i не равен N, то повторяем действия начиная с 5 пункта;

- Если К+i=N, то последнюю запись отсекаем (truncate(f) в Pascal).

  1. Закрываем файл.

8.5. Логическое удаление записи – это условное удаление записи, а физически запись остается.

Используемый прием: Для реализации логического удаления необходимо в структуру данных добавлять служебное поле, которое будем служить признаком удаленной записи. Существует различные варианты реализации, например:

1) Поле может иметь одно из значений: TRUE или FALSE

2) При записи БД в служебное поле записывается порядковый номер записи, в случае логического удаления этот номер заменяется на инверсное значение.

3) На практике встречаются и другие варианты реализации.

Логически удаленные записи «невидимые» при выполнении других операций обработки ( изменение записи, поиск, сортировка и т.д.). Это надо учитывать при реализации.

Рассмотрим механизм логического удаления, при этом примем, что удаленная запись помечается отрицательным числом. Пояснения смотри на рисунке:

1

-2

3

-4

5

-6

7


а) Записи с номерами –2, -4, -6 логически удалены и логически в файле содержатся четыре записи.

Словесный алгоритм логического удаления записи из файла.

Пусть надо удалить k-ую запись из файла

Принимаем: логически удаленная запись – это отрицательный номер записи.

    1. Открываем файл и на чтение и на запись

    2. Устанавливаем файловый указатель на начала К-ой записи.

    3. Читаем К-ую запись из файла.

    4. Изменяем поле, отвечающее за логическое удаление, на инверсное значение.

    5. Устанавливаем указатель на начало К-ой записи.

    6. Записываем К-ую запись в файл.

    7. Закрываем файл.

Как видно алгоритм логического удаления одной записи является линейным, т.е. очень простым.

8.6. Восстановление записей – это восстановление логически удаленных данных. Операция восстановления обратная операция логическому удалению.

8.7. Сжатие данных. Сжатие – это физическое удаление логически удаленных записей.

8.8. Вставка записей: Добавление записи в конец файла является частным случаем операции вставки. Рисунок, поясняющий операцию вставки с использованием дополнительного файла.

f1 (на чтение) f2 (на запись)

1

1

2

2

3

3

4

4

5

5

6

- Ввод с клавиатуры

Рисунок, поясняющий операцию вставки без использования дополнительного файла.

f (нач. состояние) f (конечное состояние)

1

1

2

2

3

3

4

4

(3’)

5

5

(4’)

6

6

(5’)

7

7

(6’)

8

(7’)


Начало

3

Ввод с клавиатуры

8.9. Сортировка записей с использованием индексного массива на примере упорядочивания данных в БД по одному полю.

Описание метода

Индексы хранятся в памяти в виде массива или в файле. В начальный момент массив инициализируется целыми числами по порядку от 1 до N (число записей в файле). Суть метода состоит в том, что во время сортировки, при сравнении полей записи, меняются местами не поля записи, а элементы индексного массива.

Рассмотрим на конкретном примере механизм метода на рисунке

Расположение данных Содержание индексного файла.

в файле до сортировки после сортировки

1

Иванов

2

Сидоров

3

Шумов

4

Архипов

5

Петров

6

Волков

Порядок вывода данных при просмотре

1

4

2

6

3

1

4

5

5

2

6

3

1

Архипов

2

Волков

3

Иванов

4

Петров

5

Сидоров

6

Шумов


Словесный алгоритм индексной сортировки:

  1. Открыть файл БД на чтение.

  2. Определить количество записей в файле N

  3. Если нет индексного файла, то инициализируется индексный массив index (в порядке упорядочивания в диапазоне от 1 до N), иначе данные переписываются в индексный массив.

  4. i=0

  5. Устанавливаем файловый указатель на i-ую запись.

  6. Читаем i-ую запись из файла

  7. j=i+1

  8. Устанавливаем файловый указатель на j-ую запись

  9. Читаем j-ую запись из файла

  10. Сравниваем поле i-ой и j-ой записи

  11. Если эти поля не соответствуют упорядочиванию, то меняются местами i-ый и j-ый элементы индексного массива

  12. Если j<N-1, то j=j+1 и переход на п.8

  13. Если i<N-1, то i=i+1 и переход на п.5

  14. Записать индексный массив в индексный файл (если есть необходимость).

  15. Вывести записи на экран монитора в соответствии с индексным массивом. Пример:

for(i=0; i<n; i++)

{

fseek(fp, index(i), SET_SEEK);

fwrite(&zp, sizeof(bd),1,fp);

viv_zp(…); {вывод записи на экран монитора}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]