Лабораторная работа № 7.
Типизированные файлы

1. Постановка задачи

Разработать программу для работы с типизированным файлом. Программа должна сделать следующее:

При любых операциях содержимое как текстового, так и типизированного файла не должно записываться в массив. Для перестановки элементов типизированного файла необходимо использовать средства прямого доступа к файлу.

Имена файлов передаются через параметры программы.

В файле должны храниться целые числа в диапазоне от -20 до +60. Осуществляется поиск первого элемента, кратного 5, и перестановка его в конец файла.

2. Таблица данных

2.1. Процедура преобразования текстового файла в типизированный

Класс Имя Смысл Тип Структура
Входные данные TextFileName Имя текстового файла строка простая переменная
TypedFileName Имя типизированного файла строка простая переменная

2.2. Процедура вывода типизированного файла

Класс Имя Смысл Тип Структура
Входные данные TypedFileName Имя типизированного файла строка простая переменная

2.3. Процедура поиска в файле первого элемента, кратного 5, и номера его позиции

Класс Имя Смысл Тип Структура
Входные данные TypedFileName Имя типизированного файла строка простая переменная
Выходные данные r Значение первого элемента, кратного 5 цел. простая переменная
n Номер позиции элемента, кратного 5, в файле цел. простая переменная

2.4. Функция перемещения первого элемента, кратного 5, в конец файла

Класс Имя Смысл Тип Структура
Входные данные TypedFileName Имя типизированного файла строка простая переменная
Выходные данные Result Результат перемещения перечислимый простая переменная

3. Аномалии

  1. Недостаточно параметров.
  2. Невозможно открыть файл для чтения.
  3. Некорректные данные в файле.
  4. Невозможно открыть файл для записи.
  5. Значения в текстовом файле не попадают в заданный диапазон – такие значения должны отбрасываться.

4. Тестовые примеры

№ теста Входные данные Ожидаемые результаты Смысл теста
1 x = {12, 46, -34, 78, -5, 13, 45, 9} r = -5
n = 4
x = {12, 46, -34, 13, 45, 9, -5}
В файле есть элементы, кратные 5.
2 x = {9, 1, -2, 33, 3, 17} В файле нет элементов, кратных 5.

5. Метод

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

При поиске заданного значения вводим значения из типизированного файла по одному, считая при этом количество введённых значений, и если элемент удовлетворяет заданному условию, выходим из цикла. Значение позиции в файле, равное -1, может служить признаком отсутствия искомого элемента.

При перемещении элемента сначала необходимо проверить, что размер типизированного файла не равен 0 (с помощью функции FileSize). Затем используем подпрограмму поиска для поиска элемента, удовлетворяющего заданному условию, и его позиции в файле. Если элемент найден, то необходимо сместить ряд элементов файла вперёд или назад в зависимости от положения найденного элемента и позиции, куда его надо переместить. Это делается с помощью операций чтения и записи и прямого доступа к файлу. Затем найденный элемент записывается в нужную позицию. Функция перемещения должна возвращать значение, сигнализирующее о результате перемещения – файл пуст, элемент не найден, элемент успешно перемещён. Для того чтобы использовать не просто числовые значения, а осмысленные имена, создадим перечислимый тип.
type Results = (Moved, FileIsEmpty, ElementNotFound);

6. Разработка программы

Если мы передаём в процедуру преобразования имена текстового и типизированного файла, то в процедуре могут возникнуть две проблемы – файл не существует или содержит неверные данные. В этом случае будут генерироваться разные исключения, и для того, чтобы различить эти ситуации, надо в операторе try...except указать тип исключения.

try Transform(Paramstr(1), Paramstr(2)); except on System.IO.IOException do begin writeln('Невозможно открыть файл ''', Paramstr(1), ''' для чтения'); exit; end; on System.FormatException do begin writeln('Файл ''', Paramstr(1), ''' содержит неверные данные'); exit; end; end;