Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум. Информатика.doc
Скачиваний:
11
Добавлен:
06.11.2018
Размер:
2.13 Mб
Скачать

Описание файлов с данными

В данной работе предлагается использовать два типа файлов с исходными данными. Оба файла содержат одну и ту же информацию, но хранят ее в разной форме. Файл с именем Dan.dat представляет собой типизированный файл, каждая запись которого представляет структуру фиксированного типа и размера. Структура каждой записи представлена ниже:

1-ое поле - string[15]; { поле для Фамилии И.О.}

2-ое поле - integer; {поле балла за 1 семестр}

2-ое поле - integer; {поле балла за 2 семестр}

2-ое поле - real; {поле для среднего балла }

Файл с именем Dan.txt является последовательным символьным файлом, в котором записи имеют различную длину. Каждая запись содержит фамилию, инициалы (в форме символ–точка–символ–точка без пробелов), две целочисленные оценки и средний балл, в виде изображения вещественного числа с фиксированной точкой. Каждое данное отделяется от соседних пробелом. Пример записи файла Dan.txt приведен ниже:

Петров П.П. 5 3 4.0

Работа с типизированным файлом достаточно проста. Описывается структура записи, содержащая указанные выше поля, Описывается типизированный файл, с записями такого типа (например с именем F), заводится переменная того же типа (например, с именем STUD). После открытия файла для чтения, оператором Read(F,STUD) в структуру STUD считывается информация об очередном студенте.

Работа с текстовым файлом осложнена тем, что в одной записи файла содержится как строка с именем и инициалами студента, так и числовая информация. Кроме того, длина фамилий в разных записях различна (но не больше 15 символов с инициалами). Организовать процедуру чтения одной записи можно по-разному. Например, можно прочесть всю запись в рабочую строку, затем найти в ней, где начинается первое число (символ из диапазона '0'..'9'), все до этого символа скопировать в строку – фамилию. Из остатка взять один символ и превратить в число стандартной процедурой Val(…), пропустить символ (пробел) и также получить вторую целочисленную оценку. Наконец, еще раз пропустив пробел, вырезать изображение среднего балла и процедурой Val(…)получить вещественное значение среднего балла. Все вырезаемые данные присваивать полям структуры данных, описывающих информацию о студенте.

В приведенном разборе контрольного варианта рассмотрен другой алгоритм чтения. Его суть заключается в следующем. Подготавливается рабочая строка длиной не менее 15 символов, для чего она заполняется каким-нибудь символом, в количестве 15 штук. Таким образом, в нулевом байте этой строки будет число 15 – текущая длина строки. Затем из записи файла читается по одному символу и заносится на соответствующее место в рабочую строку. Цикл прекращается, когда будет прочитан второй пробел (отделяющий инициалы от первой оценки). Так как при чтении ведется подсчет количества символов, в конце цикла известна длина фамилии. Из рабочей строки вырезается подстрока найденной длинны, начиная от первого символа, и копируется стандартной строковой функцией Copy(…) в поле структуры для фамилии студента.

Остаток входной записи читается обычным оператором Readln в две целочисленные и одну вещественную переменные для оценок (в поля структуры). Отметим, что в качестве рабочей строки можно использовать само строчное поле структуры.

В этом случае операторы чтения одной записи можно записать, например, так:

i:=0; { счетчик символов }

P:=0; { счетчик пробелов }

Stud.Name:='---------------'; {поле фамилии заполняем строкой из прочерков на всю длину }

while P<2 do {пока не прочтем второй пробел }

begin