Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




В данной работе предлагается использовать два типа файлов с исходными данными. Оба файла содержат одну и ту же информацию, но хранят ее в разной форме. Файл с именем 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

inc(i); { стандартная процедура увеличения на 1 }

read(F,Stud.Name[i]); {читаем из файла по символу в поле имени }

if Stud.Name[i]=' ' then P:=P+1; { подсчет пробелов}

end;

Stud.Name:=Copy(Stud.Name,1,i); { Из полной строки поля фамилии вырезаем подстроку по второй пробел (включительно) и заносим обратно в поле фамилии }

readln(F,Stud.Bal1,Stud.Bal2,Stud.SrBal); { остаток записи файла читаем в поля оценок }

 

Разбор контрольного варианта

Задание

Таблица 31. Данные к заданию 31 варианта

№ вар. Требования к записям, выбираемым из файла и помещаемым в список Тип списка Файл данных
  В начало – только с пятерками, в конец – только с тройками S0D dan.txt

 

На основе общего задания и данных таблицы вариантов конкретное задание формулируется следующим образом:

Заполнить нульсвязный список дек данными из файла DAN.TXT, занося в начало дека записи о студентах, у которых все оценки – 5 баллов, а в конец дека – сведения о студентах, имеющих все оценки – 3 балла. Добавить в начало дека запись, в которой вместо фамилии указан тип списка, а вместо первой оценки – число записей с информацией в деке. Вывести в выводной текстовый файл таблицу записей из дека. Созданный дек удалить из памяти.

Содержание программы

Задание включает в себя следующие действия, подлежащие программированию:

  • Формирование пустого дека;
  • Открытие входного и выходного файлов;
  • Чтение данных из файла с занесением нужных записей в дек с подсчетом их количества;
  • Добавление информационной записи в начало дека;
  • Вывод в выходной файл информационной записи из дека с удалением этой записи;
  • Вывод "шапки" таблицы в выходной файл;
  • Удаление из дека записей с выводом информации в табличном виде в выходной файл;
  • Закрытие выходного файла.

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

Учитывая, что файл текстовый, воспользуемся процедурой чтения строки файла с распределением информации по полям структуры, как это рассмотрено в пояснениях выше.




Поделиться с друзьями:


Дата добавления: 2014-11-06; Просмотров: 289; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.