Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Для последовательного чтения данных из файла требуется выполнить следующие действия:Содержание книги
Поиск на нашем сайте 1. Описать файловую переменную. 2. Описать переменную того же типа. 3. Выполнить назначение (Assign). 4. Открыть файл для чтения (Reset). 5. В цикле читать из файла (Read). 6. Закрыть файл (Close). Пример 5. Определить среднюю температуру для значений, хранящихся в файле Temp.dat. Program Task2; Var Ft: File Of Real; T,St: Real; N: Integer; Begin Assign(Ft,'Temp.dat'); Reset(Ft); St:=0; While Not Eof(Ft) Do Begin Read(Ft,T); St:=St+T End; N:=FileSize(Ft); St:=St/N; WriteLn('Средняя температура зa',N:3,'суток равна',St:7:2,'гр-в'); Close(Ft) End. В этой программе использована функция определения размера файла: FileSize (<имя файловой переменной>); Ее результат — целое число, равное текущей длине файла. Замечание: согласно стандарту Паскаля в файл, открытый оператором Rewrite, можно только записывать информацию, а файл, открытый оператором Reset, можно использовать только для чтения. В Турбо Паскале допускается запись (Write) в файл, открытый для чтения (Reset). Это создает определенные удобства для модификации файлов. Текстовые файлы. Текстовый файл — наиболее часто употребляемая разновидность файлов. Как уже отмечалось раньше, немагнитные внешние устройства (логические) работают только с текстовыми файлами. Файлы, содержащие тексты программ на Паскале и других языках программирования, являются текстовыми. Различная документация, информация, передаваемая по каналам электронной связи, — все это текстовые файлы. В программе файловая переменная текстового типа описывается следующим образом: Var <идентификатор>:tехt; Текстовый файл представляет собой символьную последовательность, разделенную на строки
Каждая строка заканчивается специальным кодом — маркером конца строки (м.к.с.). Весь файл заканчивается маркером конца файла (м.к.ф.). Схематически это выглядит так:
Каждый символ представлен во внутреннем коде (ASCII) и занимает 1 байт. Текстовый файл отличается от символьного не только делением на строки. В текстовой файл можно записать и из него прочитать информацию любого типа. Если эта информация несимвольная, то в процессе чтения или записи происходит ее преобразование из символьной формы во внутреннюю и обратно. Текстовый файл можно создать или преобразовать с помощью текстового редактора. Его можно просмотреть на экране дисплея или распечатать на принтере. В программах на Паскале для работы с текстовыми файлами наряду с процедурами Read и Write употребляются процедуры ReadLn и WriteLn. ReadLn(FV,<CПИСок ввода>) Эта процедура читает строку из файла с именем FV, помещая прочитанное в переменные из списка ввода. WriteLn(FV,<список вывода>) Процедура записывает в файл FV значения из списка вывода, после чего выставляет маркер конца строки. Для обнаружения конца строки в текстовом файле используется функция Eoln(FV) (End of line — конец строки). Это логическая функция, которая принимает значение true, если указатель файла достиг маркера конца строки и false — в противном случае. Употребление операторов Read и ReadLn без указания имени файловой переменной обозначает чтение из стандартного файла Input (ввод с клавиатуры). Употребление операторов Write и WriteLn без имени файловой переменной обозначает запись в стандартный файл Output (вывод на экран). В таком варианте этими операторами мы уже многократно пользовались. Считается, что файлы INPUT и OUTPUT всегда открываются соответственно для чтения и записи при работе любой программы. При вводе с клавиатуры маркер конца строки обнаруживается при нажатии на клавишу Enter. Процедура ReadLn может использоваться без списка ввода. В этом случае происходит пропуск текущей строки в читаемом файле. Употребление процедуры WriteLn без списка вывода обозначает вывод пустой строки (в файле выставляется маркер конца строки). При записи в текстовый файл в списке вывода могут присутствовать форматы. Действия форматов мы уже рассматривали при обсуждении вывода данных на экран. Точно так же форматы работают и при выводе в текстовые файлы, связанные с любыми другими устройствами. Пример 6. Пусть файл с именем Note.txt содержит некоторый текст. Требуется подсчитать количество строк в этом тексте. Var Note: Text; К: Integer; Begin Assign (Note,'Note.txt'); Reset(Note); K:=0; While Not Eof(Note) Do Begin ReadLn(Note); K:=K+1 End; WriteLn ('Количество строк равно',К); Close(Note) End. Используемый здесь оператор ReadLn (Note) «пролистывает» строки из текстового файла Note, не занося их в какую-либо переменную. Пример 7. В текстовом файле Note.txt определить длину самой большой строки. Var Note: Text; Max,К: Integer; С: Char; Begin Assign(Note,'Note.txt'); Reset (Note); Max:=0; While Not Eof(Note) Do Begin K:=0; While Not Eoln(Note) Do Begin Read(Note,C); K:=K+1 End; If K>Max Then Max:=K; ReadLn(Note) End; WriteLn('Наибольшая строка имеет', Max,'знаков'); Close(Note) End. Здесь каждая строчка прочитывается посимвольно, при этом в переменной к работает счетчик числа символов в строке. В переменной Мах отбирается наибольшее значение счетчика. Комбинированный тип данных Все структурированные типы данных, с которыми мы уже познакомились, представляют собой совокупности однотипных величин. Комбинированный тип данных — это структурированный тип, состоящий из фиксированного числа компонент (полей) разного типа. Комбинированный тип имеет еще и другое название — запись. Обычно запись содержит совокупность разнотипных атрибутов, относящихся к одному объекту. Например, анкетные сведения о студенте вуза могут быть представлены в виде информационной структуры (рис. 35).
Такая структура называется двухуровневым деревом. В Паскале эта информация может храниться в одной переменной типа Record (запись). Задать тип и описать соответствующую переменную можно следующим образом: Type Anketa1=Record FIO: String[50]; {поля} Pol: Char; Dat: String[16]; {записи} Adres: String[50]; Curs: 1..5; (или элементы) Grup: 1..10; Stip: Real {записи} End; Var Student: Anketa1; Такая запись, так же как и соответствующее ей дерево, называется двухуровневой. К каждому элементу записи можно обратиться, используя составное имя, которое имеет следующую структуру: <имя переменной>.<имя поля> Например, student. fio; student. dat и т.п. Если, например, требуется полю курс присвоить значение 3, то это делается так: Student.Curs:=3; Поля записи могут иметь любой тип, в частности сами могут быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 2 уровней). Например, те же сведения о студентах можно отобразить трехуровневым деревом (рис.36).
Такая организация данных позволит, например, делать выборки информации по году рождения или по городу, где живут студенты. В этом случае описание соответствующей записи будет выглядеть так: Type Anketa2=Record FIO: String[50]; Pol: Char; Dat: Record God: Integer; Mes: String[10]; Den: 1..31 End; Adres: Record Gorod: String[20]; UlDomKv: String[30]; End; Curs: 1..5; Grup: 1..10; Stip: Real End; Var Student: Anketa2; Поля такой записи, находящиеся на третьем уровне, идентифицируются тройным составным именем. Например, student.Dat.God; student.Adres.Gorod. Приведем структурограмму задания комбинированного типа (рис.37).
В программе могут использоваться массивы записей. Если на факультете 500 студентов, то все анкетные данные о них можно представить в массиве: Var Student: Array[1..500] Of Anketal; В таком случае, например, год рождения пятого в списке студента хранится в переменной student[5].Dat.God. Любая обработка записей, в том числе ввод и вывод, производится поэлементно. Например, ввод сведений о 500 студентах можно организовать следующим образом: For I:=1 То 500 Do With Student[I] Do Begin Write('Ф.И.0.:'); ReadLn(FIO); Write('Пол (м/ж):'); ReadLn(Pol); Write('Дата рождения:'); ReadLn(Dat); Write('Адрес:'); ReadLn(Adres); Write('Курс:'); ReadLn(Curs); Write('Группа:'); ReadLn(Grup); Write('Стипендия (руб.):'); ReadLn(Stip) End; В этом примере использован оператор присоединения, который имеет следующий вид: With <переменная типа запись> Do <оператор>; Он позволяет, один раз указав имя переменной типа запись после слова With, работать в пределах оператора с именами полей как с обычными переменными, т. е. не писать громоздких составных имен. Тип запись в Паскале может иметь переменный состав полей, который меняется в ходе выполнения программы. Такая возможность реализуется с использованием так называемой вариантной части записи. Подробнее об этом можно прочитать в книгах по Паскалю. Работа с файлами записей. Чаще всего записи используются как элементы файлов, составляющих компьютерные информационные системы. Рассмотрим примеры программ, работающих с файлами записей. Пример 1. Сформировать файл FM.dat, содержащий экзаменационную ведомость одной студенческой группы. Записи файла состоят из следующих элементов: фамилия, имя, отчество; номер зачетной книжки; оценка. Program Examen; Type Stud=Record FIO: String[30]; Nz: String[6]; Mark: 2..5 End; Var Fstud: File Of Stud; S: Stud; N,I: Byte; Begin Assign(Fstud,'FM.DAT'); Rewrite(Fstud); Write('Количество студентов в группе?'); ReadLn(N); For I:=1 To N Do Begin Write(I:1,'-й,Фамилия И.О.'); ReadLn(S.FIO); Write('Номер зачетки:'); ReadLn(S.Nz); Write('Оценка:'); ReadLn(S.Mark); Write(Fstud,S) End; WriteLn('Формирование файла закончено!'); Close(Fstud) End. Прежде чем перейти к следующему примеру, связанному с обработкой сформированного файла, рассмотрим еще одно средство работы с файлами, которое мы пока не обсуждали. Прямой доступ к записям файла В стандарте языка Паскаль допустим только последовательный доступ к элементам файла. Одной из дополнительных возможностей, реализованных в Турбо Паскале, является прямой доступ к записям файла. Как уже отмечалось, элементы файла пронумерованы в порядке их занесения в файл, начиная с нуля. Задав номер элемента файла, можно непосредственно установить на него указатель. После этого можно читать или перезаписывать данный элемент. Установка указателя на нужный элемент файла производится процедурой Seek(FV,n) Здесь FV — имя файловой переменной, n — порядковый номер элемента. В следующем примере эта процедура будет использована. Пример 2. Имеется файл, сформированный программой из предыдущего примера. Пусть некоторые студенты пересдали экзамен и получили новые оценки. Составить программу внесения результатов переэкзаменовки в файл. Программа будет запрашивать номер студента в ведомости и его новую оценку. Работа заканчивается, если вводится несуществующий номер (9999). Program New_Marks; Type Stud=Record FIO: String[30]; Nz: String[6]; Mark: 2..5 End; Var Fstud: File Of Stud; S: Stud; N: Integer; Begin Assign(Fstud,'FM.DAT'); Reset(Fstud); Write('Номер в ведомости?'); ReadLn(N); While N<>9999 Do Begin Seek(Fstud,N-l); Read(Fstud,S); Write(S.FIO,'оценка?'); ReadLn(S.Mark); Seek(Fstud,N-l); Write(Fstud,S); Write('Номер в ведомости?'); ReadLn(N); End; WriteLn('Работа закончена!'); Close(Fstud) End. Пример требует некоторых пояснений. Список студентов в ведомости пронумерован, начиная от 1, а записи в файле нумеруются от 0. Поэтому, если n — это номер в ведомости, то номер соответствующей записи в файле равен n-1. После прочтения записи «номер n—1» указатель смещается к следующей n-й записи. Для повторного занесения на то же место исправленной записи повторяется установка указателя.
|
||
|
Последнее изменение этой страницы: 2017-02-07; просмотров: 300; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.007 с.) |