With x Do

Записи

End.

Begin

ReadLn(baza, nomer, fam, name, ocenka, sr_ball); читаем из файла очередную строку с данными

WriteLn(nomer:10, fam:15, name:15, ocenka:3, sr_ball:6:2 ); выводим ее на экран

End;

Close(baza); закрываем файл

ReadLn;

На экране появится:

ИС-09 Иванов Иван 4 4.12

ПО-09 Петров Петр 5 4.27

ЗИ-09 Сидоров Сидор 3 3.42

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

 

На начальных этапах развития программирования, при решении математических, экономических или инженерных задач программисты, как правило, обходились десятком переменных, которые обрабатывались разными алгоритмами. С течением времени объемы обрабатываемых данных стали расти. Приходилось обрабатывать не один-два десятка чисел, а целые таблицы. К тому же таблицы стали содержать не только числовую, но и текстовую информацию. И тут на помощь пришли новые типы данных – массивы, строки, множества. С их помощью можно объединить несколько объектов под одним именем, а затем обращаться к ним поэлементно. Основное требование при создании таких структур – однотипность объединяемых объектов. Однако сложность многих реальных ситуаций требует для своего отражения более гибких средств программирования.

Практика показала, что для обработки больших совокупностей однотипных данных такая структура, как массив, очень полезна. Но массив полезен тогда, когда обрабатывается однотипная информация. Реальные задачи в большинстве своем имеют дело с обработкой данных различных типов: информация по кадрам, статистические данные, бухгалтерский учет, экономические задачи. В этих задачах существенно то, что совместно обрабатывается числовая и текстовая информация, причем, как правило, размерность обрабатываемых данных даже одного типа весьма различна. Например, для хранения данных об одном студенте (номер учебной группы, фамилия, имя, оценка по информатике, средний балл сдачи сессии) нельзя использовать один массив, так как эти данные разнотипны: номер группы, фамилия, имя – строки, оценка – целое, средний балл – вещественное. Конечно, можно использовать несколько массивов: один - для хранения номеров групп, второй – для хранения фамилий и имен, третий – для хранения оценок, четвертый – для хранения средних баллов и так далее. Связь между этими массивами можно установить с помощью индексов. При этом необходимо будет решать сложную задачу целостности информации. Например, если произвести сортировку фамилий во втором массиве по алфавиту, то соответствующим образом необходимо переставить элементы остальных массивов, чтобы фамилии соответствовали остальным данным. Это достаточно сложная задача.

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

Для работы с данными различных типов, но объединенных в одну структуру под одним именем, в Паскале введен новый тип данных – запись.

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

В отличие от ранее рассмотренных типов данных, тип записи описывается в разделе определения типов:

Type TStudent = Record

nomer, fam, name : String[15];

ocenka : 2..5;

sr_ball : Real;

End;

Внимание! Описание записи заканчивается словом End, для которого нет слова Begin.

Описан тип записи с именем TStudent, имеющий поля:

nomer, fam, name - номер группы, фамилия и имя – строки длиной 15 символов,

ocenka - оценка по информатике – интервал от 2 до 5,

sr_ball - средний балл сдачи сессии – вещественное.

Таким образом, при описании полей указываются их имена и через двоеточие – типы. Описание заканчивается словом End.

После определения типа записи можно описать разные базовые структуры этого нового типа в разделе описания переменных:

Var stud_1 : TStudent;

gruppa : Array [1..15] Of TStudent;

baza_gruppa : File Of TStunent;

Описанная переменная stud_1 имеет те же поля, что и запись типа TStudent. Чтобы обратиться к любому поля, необходимо написать имя переменной и через точку – имя поля. Поле записи определенного типа может являться операндом в любых выражениях того же типа, то есть к нему могут применяться операции, допустимые для переменных данного типа:

stud_1.nomer := ‘ИС-09’;

stud_1.fam := ‘Иванов’;

stud_1.name := ‘Ваня’;

stud_1.ocenka := 4;

stud_1.sr_ball := 4.12;

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

.nomer := ‘ИС-09’; это неправильно!

.fam := ‘Иванов’; это неправильно!

Для упрощения работы с записями в Паскале введен специальный оператор, позволяющий сократить написание имен записей – оператор присоединения:

оператор;

где With - служебное слово c,

x - имя переменной-записи,

Внутри этого оператора поля переменной-записи обозначаются без имени самой записи: